【问题标题】:knockout.js pushing items into observablearrayknockout.js 将项目推入 observablearray
【发布时间】:2014-01-06 20:35:16
【问题描述】:

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

答案最终是,我在数组中添加了一个空项,使数组无法工作。

【问题讨论】:

  • 你能解释一下你的目标吗,请尽量减少“测试”字眼
  • 我想在 ko.observableArray 中放入一个数组

标签: javascript knockout.js


【解决方案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());

【讨论】:

  • 酷!!为什么要推送测试的名称,而不是测试对象本身?如果测试对象有更多的属性而不是名称呢?
  • 我以为这就是你想要的,当然你可以推送 Test 并使用它的 observable 属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-11
  • 1970-01-01
  • 1970-01-01
  • 2018-04-30
  • 1970-01-01
  • 2014-08-04
  • 2017-06-09
相关资源
最近更新 更多