2016-01-04 3 views
4

я в настоящее время написания JSON результат на страницу, используя для петли, аналогичной приведенной ниже примере (упрощенный вариант):Написание кода в цикле

var output = ""; 
for (i in response) { 
    var ID = response[i].ID 
    var name = response[i].name 

    output += "<div id=\""+ID+"\">"+name+"</div>" 
} 

$("#allResults").html(output); 

Выходная переменная становится раздутым & запутанным. Есть ли способ записать в выходную переменную без необходимости "", так как особенно сложно вставить переменные & позже изменить код?

+5

Вы должны использовать шаблонный или Databinding двигатель, такие как Рулевые рейки или нокаут. – SLaks

+0

@Mr T, Попробуйте мой шаблонный шаблон handlebarjs –

ответ

1

Попробуйте ниже HandlebarJS Templating Snippet. Включите эту опцию:

<script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/2.0.0/handlebars.js"></script> 

Handlebar Шаблон:

<script id="name-template" type="text/x-handlebars-template"> 
    {{#each people}} 
    <div id="{{ID}}">{{name}}.</div> 
    {{/each}} 
</script> 

HTML:

<div class="content-placeholder"></div> 

JQuery и шаблона Компиляция:

$(function() { 
    // Grab the template script 
    var theTemplateScript = $("#name-template").html(); 

    // Compile the template 
    var theTemplate = Handlebars.compile(theTemplateScript); 

    // This is the default context, which is passed to the template 
    var context = { 
    people: [ 
     { ID: 1000, name: 'Simpson' }, 
     { ID: 1001, name: 'Griffin' }, 
     { ID: 1002, name: 'Cartman' }, 
     { ID: 1003, name: 'McCormick' } 
    ] 
    }; 

    // Pass our data to the template 
    var theCompiledHtml = theTemplate(context); 

    // Add the compiled html to the page 
    $('.content-placeholder').append(theCompiledHtml); 
}); 
+0

Это то, что я искал (вроде). Массив JSON, который возвращается от стороннего API, имеет различное количество ответов, но я должен работать с этим. благодаря –

0

Просто используйте одинарные кавычки, чтобы избежать побега, как это:

JS Fiddle

output += '<div id="'+ID+'">'+name+'</div>'; 
+0

Я достиг точки, в которой у меня есть тонна кода и ее просто беспорядочный (& не выглядит правильным цветом в скобках!). Я смотрю на Handlebars согласно рекомендации SLaks. –

+0

Уверенный шаблон был бы лучше –

1

Я хотел бы сделать следующее в попытке сделать его 'проще'

var allResults = $("#allResults"); 
for (i in response) { 
    var ID = response[i].ID, 
     name = response[i].name; 

    $('<div/>') 
     .attr('id', ID) 
     .html(name) 
     .appendTo(allResults); 
} 
+0

Спасибо. Я хочу добавить намного больше контента в производственную модель, поэтому я, вероятно, в конечном итоге столкнулся бы с такой большой задачей обслуживания, но спасибо за ваш ответ за ее простой поиск простых входов в соответствии с моим примером. –

1

Что вам действительно нужно создавать DOM-элементы для представления DOM, а не строки, которые представляют DOM.

Document Object Model: Запись элементов на странице и связанных с ними значений.

Чтобы создать элемент, JQuery предлагает несколько ярлыков

span = $("<span>"); 
div = $("<div >"); 
anchor = $("<anchor >"); 
//etc. 

Чтобы соединить эти элементы друг с другом использования append.

Таким образом, используя их, Вы можете воссоздать некоторые из этих простых структур

//<div id="hi"></div> 
var hi = $('<div>'); 
hi[0].id = "hi"; 

//<div id="foo"><span>Bar</span></div> 
var foo = $("<div>"); 
foo[0].id = "foo"; 
var Bar = $("<span>"); 
Bar.text("Bar"); 
foo.append(Bar); 

Этот тип шаблона следует использовать при воссоздании структуры из вашего JSON.

var output = $("#allResults"); 
for (i in response) { 
    var pair = $("<div>"); 
    pair[0].id = response[i].ID; 
    pair.text(response[i].name); 

    output.append(pair); 
} 
1

В зависимости от версии браузера, вы можете быть в состоянии использовать template strings, которые позволяют более читаемый код. В вашем случае:

output += `<div id="${response[i].ID}">${response[i].NAME}</div>`; 

Примечание задняя кавычка или кавычка ` Однако шаблонный движок будет лучше всего подходит для больших контента.

+0

Я искал заманчивый движок какой-то формы, так как мой производственный код намного более занят и становится неуправляемым. Спасибо за ваш ответ, хотя он будет работать как более простая альтернатива тому, что я делаю. –

1

Как насчет этого? :

var response = [ 
 
    { ID: 1, name: "a"}, 
 
    { ID: 2, name: "b"}, 
 
    { ID: 3, name: "c"}, 
 
    { ID: 4, name: "d"} 
 
]; 
 
var output = ""; 
 
var divElement = "<div id='$id'>$name</div>" 
 
for (i in response) { 
 
    var ID = response[i].ID 
 
    var name = response[i].name 
 
    output += divElement.replace("$id",ID).replace("$name",name) 
 
} 
 

 
$("#allResults").html(output);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<p id="allResults"> 
 
</p>

Смежные вопросы