knockout.js将物品推入observablearray

时间:2013-12-18 15:23:50

标签: javascript knockout.js

JSFiddle

我正在尝试将现有数组的对象推送到一个可淘汰的可观察数组但是失败很糟糕。我如何让这段代码工作,因为这段代码很糟糕,这样做的“正确”方法是什么。非常感谢你

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

答案结束了,我正在向数组中添加一个空项,使得数组不起作用。

1 个答案:

答案 0 :(得分:1)

您在Test.Init中传递'one2'字符串,但此方法不接受参数:

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>

视图模型:

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