#javascript #knockout.js
#javascript #knockout.js
Вопрос:
Я пытаюсь изучить knockout.Я пытаюсь изучить привязку foreach в нокауте.
Сначала я объявил объект javascript
var people = function()
{
var self = this;
this.firstname = ko.observable("")
this.lastname = ko.observable("")
}
Я попытался вставить элементы в объект javacript
var x = новые люди();
x.push({firstName: "bob" ,lastName:'gill'});
Я добавил viewmodel
function TestViewModel()
{
var self = this;
this.person = ko.observableArray({people});
}
создал экземпляр viewmodel и вставил элементы
var viewmodel = new TestViewModel();
viewmodel.person.push(x);
Наконец-то привязал элементы
ko.applyBindings(viewmodel);
Вот JSFIDDLE, которого я пытаюсь достичь
http://jsfiddle.net/GSvnh/5592/
Я хочу следующий вывод
firstname lastname
bob marley
tom brady
George clooney
Комментарии:
1.
.push()
применяется к массивам , ноx
не является массивом, это экземплярpeople
.2. Очень неясно, что вы пытаетесь сделать. Вы пробовали что-нибудь еще? Вы смотрели консоль в своем браузере? Ошибка, которую вы получаете сейчас, заключается в том, что push не является функцией. У вас нет метода push, объявленного в вашем объекте «people». Я не могу сказать вам, что именно вам нужно изменить, пока вы не сможете четко указать, что вы пытаетесь сделать. На данный момент ваш вопрос не имеет ничего общего с knockout, а с базовым javascript.
3. @peinearydevelopment: я пытаюсь добавить массив объектов people в person, а затем использовать привязку foreach для отображения всех элементов в массиве
4. Я пытаюсь реализовать это
Ответ №1:
У вас есть пара проблем, которые нужно решить в вашем JSFiddle:
- В вашем
thead
HTML отсутствует закрытие>
- Как упоминал пользователь nnnnnn, вы пытаетесь перейти к экземпляру People, а не к массиву, который привязан к вашему foreach
- Ваши привязки значений не соответствуют вашим именам свойств people (
firstname
vsfirstName
)
Вот обновленный JSFiddle, который реализует базовый пример foreach: http://jsfiddle.net/GSvnh/5593 /
Ответ №2:
Чтобы ответить на этот вопрос, следуйте примеру, в котором у меня есть объем информации в базе данных, и я помещу ее в таблицу данных в моем интерфейсе.
function tableData(){
<cfoutput>
var newDados = #serializeJSON(mySQLData)#;
var dataABC = newDados.ABC;
var dataXYZ = newDados.XYZ;
</cfoutput>
//cfoutput is a Cold Fusion parameter to receive data from SQL.
В этом случае я сериализуюnewdados в объект.
ABC и XYZ являются объектами, сыновьями новичков.
В этом случае я хочу смешать и поместить оба дочерних объекта в один объект, чтобы совместить эти параметры. Итак, я использую forEach
функцию:
allData = new Array();
dadosABC.forEach(function(obj){
allData.push(obj);
});
XYZ.forEach(function(obj){
allData.push(obj);
});
//Here allData have already receiving data of both newDados object child
allDataSize = allData.length;
for (var i = 0; i < sizePreenc; i ) {
allData[i] = new Array();
tableData[i].push(allData[i]);
tableData[i].push(allData[i].firstName);
tableData[i].push(allData[i].lastName);
tableData[i].push(allData[i].age);
tableData[i].push(allData[i].gender);
};
drawGrid('');
};
Таким образом, я помещаю свои данные в таблицу или все, что захочу.