2013-12-18 3 views
0

JSFiddle.knockout.js толкающие предметы в наблюдаемыйarray

Я пытаюсь вытолкнуть объекты для существующего массива в наблюдаемый массив нокаутом, но я не могу сделать это ужасно. Как я могу заставить этот код работать, и поскольку этот код засасывает то, что является «правильным» способом этого. Большое спасибо

<div data-bind="foreach: Bob"> 
    <div data-bind="text: $data"> 
    </div> 
</div> 
var Test = function(){ 
    var self= this; 
    self.Init = function(name){ 
     self.Name = ko.observable(name); 
    }; 
}; 
var ArrayOfTests = function() { 
    var self = this; 
    self.Init = function(tests){ 
     self.AllTests = ko.observableArray([]); 
     for(var i = 0; i <=tests.length-1;i++) 
     { 
      self.AllTests.push(tests[i]); 
     }; 
    }; 
}; 

var TestViewModule = function(){ 
    self.Bob = ko.observable(); 
    var temp = new ArrayOfTests(); 
    var tempTest = new Test(); 
    tempTest.Init('one2'); 
    temp.Init([tempTest,tempTest]); 
    self.Bob= temp; 
}; 
ko.applyBindings(new TestViewModule()); 
console.log(new TestViewModule()); 

Ответ закончился тем, что я добавлял нулевой элемент в массиве делает массив не работает.

+0

вы можете просто объяснить, что ваша цель, и, пожалуйста, минимизируют «тест» слова –

+0

я хочу поставить один массив внутри из ko.observableArray – gh9

+0

просто перечитать тебя [Наблюдаемые Массивы документации] (HTTP : //knockoutjs.com/documentation/observableArrays.html) –

ответ

1

Вы передаете 'One2' строки в Test.Init, но этот метод не принимает параметры:

var Test = function(){ 
    var self= this; 
    self.Name = ko.observable(); 
    self.Init = function(data){ 
     self.Name(data); 
    }; 
}; 

Редактировать

Я укомплектовать переработан ваш ViewModel, потому что текущая реализация не является правильным :

Html:

<div data-bind="with: Bob"> 
    <div data-bind="foreach: AllTests"> 
     <div data-bind="text: $data"> 
     </div> 
    </div> 
</div> 

ViewModel:

var Test = function(){ 
    var self= this; 
    self.Name = ko.observable(name); 

    self.Init = function(name){ 
     self.Name(name); 
    }; 
}; 

var ArrayOfTests = function() { 
    var self = this; 
    self.AllTests = ko.observableArray(); 

    self.Init = function(tests) {   
     for(var i = 0; i < tests.length; i++) { 
      self.AllTests.push(tests[i].Name()); 
     }; 
    }; 
}; 

var TestViewModule = function(){ 
    var temp = new ArrayOfTests(); 
    var tempTest = new Test(); 
    tempTest.Init('one2'); 
    temp.Init([tempTest,tempTest]); 

    self.Bob = ko.observable(temp); 
}; 

ko.applyBindings(new TestViewModule()); 
console.log(new TestViewModule()); 
+0

славная находка, я исправил код, но он все еще не работает. – gh9

+0

Прохладный! Почему вам нужно нажимать имя Test вместо самого тестового объекта? что если тестовый объект имел больше свойств, то просто имя? – gh9

+0

Я думал, это то, что вы хотите, конечно, вы можете нажать «Тест» и использовать его наблюдаемые свойства. – alexmac

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