简体   繁体   English

kickout.js将项目推入observablearray

[英]knockout.js pushing items into observablearray

JSFiddle . JSFiddle

I am trying to push objects for an existing array into a knockout observable array but am failing terrible. 我正在尝试将现有阵列的对象推入可观察到的可观察阵列,但失败了。 How do I get this code to work, and since this code sucks what is the 'proper' way of doing this. 我如何使此代码起作用,并且由于此代码很烂,因此是“正确的”方法。 Thank you so much 非常感谢

<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());

The answer ended up being, I was adding a null item to the array making the array not work. 答案最终是,我向该数组添加了一个null项目,使该数组无法正常工作。

You pass 'one2' string in Test.Init, but this method don't accept parameters: 您在Test.Init中传递“ one2”字符串,但是此方法不接受参数:

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

Edit 编辑

I completly refactored your viewModel, because current implementation is not correct: 我完全重构了您的viewModel,因为当前的实现不正确:

Html: 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());

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM