Как мне перенести элементы в объект javascript в нокауте

#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. Я пытаюсь реализовать это

5. jsfiddle.net/GSvnh/5594

Ответ №1:

У вас есть пара проблем, которые нужно решить в вашем JSFiddle:

  1. В вашем thead HTML отсутствует закрытие >
  2. Как упоминал пользователь nnnnnn, вы пытаетесь перейти к экземпляру People, а не к массиву, который привязан к вашему foreach
  3. Ваши привязки значений не соответствуют вашим именам свойств people ( firstname vs firstName )

Вот обновленный 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('');
 }; 
  

Таким образом, я помещаю свои данные в таблицу или все, что захочу.