2014-04-04 203 views
-1

我想要获取计算值并将这些值推送到可观察数组。 Web Api控制器返回简单的值 - 只是没有json wrap的纯数字。可能是这个问题。请告知,因为我是Knockout的新手。 P.S.这是两个ajax调用,因为他们调用不同的api控制器。Knockout.js计算可观察不绑定到可观察数组

function GrafikViewModel(grafikUri) { 
      var self = this; 
      self.books = ko.observableArray(); 
      self.PaxLeft = ko.computed(function() { 
       ko.utils.arrayForEach(self.books(), function (book) { 
        $.getJSON("/api/orders/getpax/" + book.kodg, function (item) { 
         self.books().push(item); 
        }); 
       }, GrafikViewModel) 
      }); 
      $.getJSON(grafikUri, function (data) { 
       self.books(data.$values); 
      }); 
     } 
+0

你想用一个副作用一个计算的?你确定?顺便说一句,你已经在这里创建了一个循环依赖关系 - 一个计算结果改变了“书”,并对“书”上的变化做出了反应。我认为你在错误的轨道上,请解释你实际上想要做的事情。 – Tomalak

+0

副作用是什么意思?关于循环依赖你是对的。我应该改变它是self.PaxLeft(这是ko.observable)?实际上,我的目标是从两个不同的控制器获取数据,并将它们放到同一个observableArray中。 –

+0

我在想第一个ajax调用。难道这是控制器返回只是纯粹的整数值,没有任何JSON包装的问题? –

回答

0

我不得不做一些猜测,但我相信你想要的是

self.books.push(item); 

,而不是

self.books().push(item); 

注意失踪()那里。淘汰赛观察阵列“镜像”大部分阵列的功能。通过使用这些代替Array提供的那些,淘汰赛可以跟踪发生在包裹阵列上的变化。

编辑:您可以在http://knockoutjs.com/documentation/observableArrays.html#manipulating-an-observablearray找到的所有的“镜像”功能的列表,大约两页下(节“操控的observableArray”)

+0

我确实改变了,但这没有帮助。 –