2013-03-14 98 views
2

我迪朗达尔视图模型的工作,像这样:迪朗达尔KO绑定查看问题

define(function (require) { 
var http = require('durandal/http'); 

return { 
    subjectItem: function (data) { 
     var self = this; 
     self.Subject_ID = data.Subject_ID; 
     self.Subject_Name = data.Subject_Name; 
    }, 
    subjects: ko.observableArray([]), 
    activate: function() { 
     var self = this; 
     http.ajaxRequest("get", "/api/values/getsubjects") 
      .done(function (allData) { 
       var mappedSubjects = $.map(allData, function (list) { return new self.subjectItem(list); }); 
       self.subjects(mappedSubjects); 
      }); 
    } 
}; 
}); 

然而,在第一次浏览这个视图运行Ajax调用,但不会再改变DOM,找到它,他们都出现(仍然运行ajax调用)。这是我的html:

<table> 
<thead> 
    <tr> 
     <th>Name</th> 
    </tr> 
</thead> 
<tbody data-bind="foreach: subjects"> 
    <tr> 
     <td data-bind="text: Subject_Name"></td> 
    </tr> 
</tbody> 
</table> 

任何线索,我很新使用杜兰达,但现在担心它不会有效地保持dom更新。

回答

6

我觉得你的问题是非常相似:HotTowel: Viewmodel lose mapping when navigating between pages

AJAX调用是asyncronous任务,所以你需要在激活函数返回一个承诺的告诉迪朗达尔等到数据之前检索继续申请绑定。

+0

完美,我只是把我的ajaxRequest调用的开始返回,现在每次都在那里,谢谢。 – user1166905 2013-03-14 18:45:28