【问题标题】:Knockout: can't we just use observable instead of observablearray淘汰赛:我们不能只使用 observable 而不是 observablearray
【发布时间】:2014-08-21 07:39:20
【问题描述】:

鉴于 JavaScript 数组是 JavaScript 对象的特定类型(关联数组),我们不能只使用 ko.observable() 代替 ko.observableArray() 吗? 特别是如果我们对观察数组属性(如长度)的变化不感兴趣...

例如,在这些基于任务列表的淘汰项目中,我们只需添加一个新任务,如下所示

tasklist[newtask.title]=newtask.description

在对象(关联数组)中。 对吗?

这里是一个字符串示例http://jsfiddle.net/zfjqd6oa/

【问题讨论】:

  • 您的问题还不清楚。您需要更具体一点:您想比较两种情况(observableobservableArray),但不要在问题中 提供两个(工作)代码示例。此外,“我们不能……吗?”你的问题的形式暗示了一个潜在的问题,但你没有提到你对哪个问题持谨慎态度?请编辑您的问题以澄清并使其更加具体。
  • 感谢@Jeroen 的评论。其实并没有真正的问题,我只是想探索一下是否可以用 observable 代替 observablearray。举个例子,您可能需要在 UI 中添加将数据绑定到数组元素的元素,而不使用 foreach 模板。
  • 您是否要求this之类的东西?

标签: knockout.js observable ko.observablearray


【解决方案1】:

@originil 谢谢你的提议。是的,这正是我想要的。这样我就可以直接访问我的“特定项目”(作为关联数组)http://jsfiddle.net/xgup9Lsv/

var SimpleListModel = function () {
    var self = this;
    self.items = ko.observable({});
    self.itemToAdd = ko.observable("");
    self.addedItems = ko.computed(function(){
         return Object.keys(self.items())});
    self.addItem = function () {
        console.log("add")
        if (self.itemToAdd() != "") {
            var addition =  self.itemToAdd()
            self.items()[addition] = addition
            self.items.valueHasMutated()
        }
    } 
};

var model = new SimpleListModel()
ko.applyBindings(model);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2013-04-09
    • 2016-01-01
    相关资源
    最近更新 更多