Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / jquery + json генерация кнопок с условием отображения / 10 сообщений из 10, страница 1 из 1
17.11.2012, 17:16:11
    #38042600
ecivgamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jquery + json генерация кнопок с условием отображения
Привет всем!

Пытаюсь сгенерировать кнопки, условия отображения которых описаны в json. Подскажите, как сделать. К слову, БЕЗ условий отображения кнопки генерируются успешно:
http://www.sql.ru/forum/actualthread.aspx?tid=983228


код json:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
{
    "Caption": "Module caption",
    "IconsDirectory": "C://Images/",
    "Buttons": [
        {
            "Conditions": [
                {
                    "ConditionText": "1 == 1",
                    "ButtonText": "Text1",
                    "Visible": true,
                    "Colors": {
                        "FontColor": "#FFFFFF",
                        "BGColor": "#00FF00"
                    },
                    "Size": {
                        "Width": 200,
                        "Height": 50
                    },
                    "Icon": {
                        "FileName": "Smile.png",
                        "Width": 16,
                        "Height": 16
                    },
                    "Url": {
                        "UrlAddress": "http://www.google.com",
                        "OpenNewWindow": true
                    },
                    "JavaScriptAction": {
                        "Text": "alert('ok');"
                    }
                },
                {
                    "ConditionText": "2 == 2",
                    "ButtonText": "Text2",
                    "Visible": true,
                    "Colors": {
                        "FontColor": "#FFFFFF",
                        "BGColor": "#00FF00"
                    },
                    "Size": {
                        "Width": 200,
                        "Height": 50
                    },
                    "Icon": {
                        "FileName": "Smile.png",
                        "Width": 16,
                        "Height": 16
                    },
                    "Url": {
                        "UrlAddress": "http://www.google.com",
                        "OpenNewWindow": true
                    },
                    "JavaScriptAction": {
                        "Text": "alert('ok');"
                    }
                }
            ]
        }
    ]
}




код html:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
<html>
<head>
<title>SMButtons</title>
<script src="jquery/jquery-1.4.2.js"></script>
<script type="text/javascript">        
//When document loaded.
$(document).ready(function(){  
// Get data from file as JSON
           $.getJSON('weekendtask.json', function(data) {
       var buttons = data.Buttons;
          $.each(buttons, function(key, val)
          {    
                   $('<li><input type="button" onClick="'+ val.JavaScriptAction +'" value="'+ val.ButtonText +'"/></li>').appendTo('#ulObj');
          });
  });        
  });
  </script>
</head>
<body>
<br>
<br>
<div>
<ul id='ulObj'>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
</div>
</body>
</html>
...
Рейтинг: 0 / 0
17.11.2012, 17:42:52
    #38042623
iConst
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jquery + json генерация кнопок с условием отображения
ecivgamer,

Да точно так же - добавив нужные элементы:
Код: javascript
1.
'... style="color:' + val.Conditions.FontColor + ';background-color:' + ...

Только, суд по наличию иконки, нужно использовать хтмл-батн...
...
Рейтинг: 0 / 0
17.11.2012, 17:53:36
    #38042626
ecivgamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jquery + json генерация кнопок с условием отображения
iConst, это мои первые шаги и мне непонятно...

Как именно модифицировать существующую строку, чтобы заработало?

Код: javascript
1.
$('<li><input type="button" onClick="'+ val.Conditions.JavaScriptAction +'" value="'+ val.Conditions.ButtonText +'"/></li>').appendTo('#ulObj');
...
Рейтинг: 0 / 0
17.11.2012, 17:57:02
    #38042627
iConst
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jquery + json генерация кнопок с условием отображения
Плохо посмотрел объект - так:
val.Conditions[0]['Colors'].FontColor и т.п.
...
Рейтинг: 0 / 0
17.11.2012, 18:07:22
    #38042634
iConst
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jquery + json генерация кнопок с условием отображения
ecivgameriConst, это мои первые шаги и мне непонятно...

....- Ну и вперед, изучать и пробовать. Вся необходимая информация уже дана.

ЗЫ: так тоже можно val.Conditions[0].Colors.FontColor
...
Рейтинг: 0 / 0
19.11.2012, 03:05:22
    #38043552
ecivgamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jquery + json генерация кнопок с условием отображения
В общем пробовал уже по-разному... сейчас в "ulObj" получается сгенерировать кнопки, однако с именем "undefined" и по клику ничего не происходит. В "ulObj2" не получается вывести кнопки, получаю ошибку "Uncaught TypeError: Cannot read property '0' of undefined". Застрял, подскажите плз...


Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
<html>
<head>
<title>SMButtons</title>
<script src="jquery/jquery-1.4.2.js"></script>
<script type="text/javascript">	        
//When document loaded.
$(document).ready(function(){   
// Get data from file as JSON
            $.getJSON('weekendtask.json', function(data) {
        //var buttons = data.Buttons;
           //$.each(buttons, function(key, val)
           //{	
            //$('<li><input type="button" onClick="'+ val.Conditions[0].JavaScriptAction +'" value="'+ val.Conditions[0].ButtonText +'"/></li>').appendTo('#ulObj');
            //$('<li><input type="button" value="'+ val.Conditions[1].BButtonText.TText +'"/></li>').appendTo('#ulObj');
var res=""
$.each(data.Buttons, function(key, button){
	$.each(button.Conditions,function(key,condition){
	//	console.log(condition)
		res+="<li>"
		res+='<input type="button"' + 
		    //'" value="'+ '"Ttt"' +
		    '" value="'+ condition.ButtonText +
		    //'" value="'+ data.Buttons.Conditions.ButtonText +
			'" onclick="' + condition.JavascriptAction +
			'" style="background-color:'+condition.Colors.BGColor+' color:'+condition.Colors.FontColor+
			'"/>'
		res+="<\/li>test<\/br>"
	})
})
$(res).appendTo('#ulObj')

           //});
   });	    	   
 	 });


 data =  JSON.parse(JSON.stringify('weekendtask.json'));   
 var buttons = data.Buttons[0].Conditions;
 //console.log(buttons);
 $.each(buttons, function(key, val) {    
   $('#ulObj2').append('<li><input type="button" onClick="'+ val.JavaScriptAction +'" value="'+ val.ButtonText +'"/>'+'</li>');
});    
//}); 

window.onload = function(){ alert("welcome"); }

   </script>
</head>
<body bgcolor="silver">
<div>
<ul id='ulObj'>
<li>1</li>
<li>2</li>
</ul>
</div>

<br>

<div>
<ul id='ulObj2'>
<li>1</li>
<li>2</li>
</ul>
</div>
</body>
</html>
...
Рейтинг: 0 / 0
19.11.2012, 04:48:31
    #38043565
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jquery + json генерация кнопок с условием отображения
Это просто ужасно ...
Зачем нам твои комментарии? Зачем в данном случае HTML-код? Зачем использовать строковые включения, напряжные для любого фреймворка, когда есть возможность корректно и понятно включить требуемый код? Куда делись твои закрывающие знаки semicolon?

Плюс-минус твой код можно трансформировать в подобный:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
$(document).ready(function(){
	$.getJSON("weekendtask.json", function(data){
		$.each(data.Buttons, function(_, button){
			$.each(button.Conditions, function(_, condition){
				var but = $("<input/>").attr({type:"button", value:condition.ButtonText}).css({backgroundColor:condition.Colors.BGColor, color:condition.Colors.FontColor});
				but.on("click", {action:condition.JavascriptAction}, function(event){eval(event.data.action);});
				$("#ulObj").append($("<li/>").append(but)).append("test</br>");//можно все свести в одну строку, но для читаемости кода разбил на несколько
			});
		});
	});
});


А в общем - это жуть ... Как раз тот случай, когда программист не полностью понимает язык и механизмы в нем, но уже вовсю использует фреймворк и лепит откровенный говнокод.

Главная проблема - строка, в которой находится скрипт, который должен выполниться при клике, так не будет работать, как ты написал. Выполняется код, а не строковая константа. Да и по большому счету, передача скрипта таким образом - это несерьезное решение, так обычно не делают.

Еще пару замечаний:
- проследи за строкой, которую ты "лепишь" - там неправильное соответствие кавычек;
- каждый язык имеет определенный необязательный (или негласный) синтаксис; js имеет ряд правил, которых придерживаются, в том числе написание функций и переменных с маленькой буквы, в том числе внутри json.
А в остальном - настолько данный код далек от приятного, понятноинтуитивного и качественного кода, что даже не находятся слова назвать что еще не так. Кстати, это очень присуще двум группам программеров: на бейсике и на ASP (.NET). Что-то там такое дают, что клиентская часть у них получается сделанной через одно место. Тут, конечно, мои извинения - мнение сугубо личное и субъективное, прошу не принимать близко и не обижаться.
...
Рейтинг: 0 / 0
19.11.2012, 10:15:11
    #38043689
ecivgamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jquery + json генерация кнопок с условием отображения
IDVsbruck, спасибо за ответ! Сейчас получаю ошибку "Uncaught SyntaxError: Unexpected token ILLEGAL", не даю дупля где возникает...
...
Рейтинг: 0 / 0
19.11.2012, 11:59:49
    #38043854
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jquery + json генерация кнопок с условием отображения
А оттрейсить? - Firebug или средства разработчика в Chrome?
...
Рейтинг: 0 / 0
19.11.2012, 12:17:13
    #38043885
ecivgamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jquery + json генерация кнопок с условием отображения
IDVsbruck, кароч все получилось. Всем спасибо, простите за тупость.
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / jquery + json генерация кнопок с условием отображения / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]