【问题标题】:Knockout.js ko.observableArray() not working as espectedKnockout.js ko.observableArray() 无法正常工作
【发布时间】:2018-10-31 05:18:25
【问题描述】:

我不确定为什么这不起作用,谁能帮忙?

我有这个简单的对象数组:

     myItems: [
       {value: 0, text: 'a'},
       {value: 1, text: 'b'},
       {value: 2, text: 'c'}
     ],


allItems: ko.observableArray(this.myItems),

console.log(this.allItems()); THIS DOES NOT WORK???

以上不工作?

现在下面只是硬编码的 myItems 数组:

allItems: ko.observableArray([
       {value: 0, text: 'a'},
       {value: 1, text: 'b'},
       {value: 2, text: 'c'}
     ]),

console.log(this.allItems()); //THIS NOW WORKS 

当我同时记录两者时,我没有看到任何区别:

console.log('this is al allItems: '+this.allItems())
console.log('this is my myItems: '+myItems());
this is al allItems: (3) [{…}, {…}, {…}]
this is my myItems: (3) [{…}, {…}, {…}]

任何帮助请!感谢。

【问题讨论】:

  • 您正在使用错误的 this 关键字访问变量 myItems。您应该使用this 和变量直接访问函数属性,就像jsfiddle.net/LkqTU/47916

标签: javascript knockout.js observable


【解决方案1】:

似乎在初始化对象时,您正在将它的值分配给另一个键。在您给定的 sn-p 中,this 指的是不存在 myItems 键并返回 undefined 的全局对象。 尝试在浏览器中执行var a = {b: 1, c: this.b}。这将返回{ b: 1, c: undefined }

但我的问题是,为什么要单独保留 myItems 而不要将其值直接传递给 ko.observableArray 函数? 因为稍后您将只想处理allItems,因为它是可观察的,而不是myItems

【讨论】:

  • ajax 请求响应数据:[ {value: 0, text: 'a'}, {value: 1, text: 'b'}, {value: 2, text: ' C'} ]; this.myItems = 响应; allItems: ko.observableArray(this.myItems)
  • 如果你的回复不是未定义的,你应该可以ko.observableArray(response)
  • 它不起作用,这就是我创建硬编码数据来查看问题的原因。但我发现 .push 工作 this.allItems.push({....}) .
  • @JulianoVargas 作为一个数组,您不需要推送检查我上面的评论。
  • @super cool this.myItems 是来自 ajax 的响应和一个带有对象的数组,它不能通过执行 allItems: ko.observableArray(this.myItems) 感谢您的努力。
猜你喜欢
  • 1970-01-01
  • 2011-11-01
  • 2016-12-01
  • 1970-01-01
  • 2016-09-01
  • 2012-07-11
  • 2018-04-08
  • 2017-04-20
  • 2018-10-02
相关资源
最近更新 更多