2013-08-05 31 views
0

我使用Knockout AMD Helpers加载ViewModels,并使用'module binding'功能。使用knockout和帮助器控制Applybindings

通常,当我需要加载远程数据时,我使用延迟对象来确保在ViewModel上所有数据都可用后才调用ko.ApplyBindings。

我使用延迟AJAX调用创建一个sample jsfiddle来说明我的问题:

self.initialize = function() { 
        self.name("This is a sample article"); 
        self.getArticleTypes(self.articleTypes); 
       }; 

self.getArticleTypes = function (observableArticleTypes) { 
        var fakeData = { 
         delay: 5 
        }; 
        $.ajax({ 
         async: true, 
         cache: false, 
         type: 'post', 
         url: '/echo/json/', 
         data: fakeData, 
         success: function (data) { 
          observableArticleTypes([{ 
           id: 1, 
           articleType: 'Breaking News' 
          }, { 
           id: 2, 
           articleType: 'Weather' 
          }]); 

          console.log("Data loaded from server"); 

         } 
        }); 
       }; 

我怎样才能建筑师我的代码,采用的是AMD助手,但延迟ApplyBindings直到我所有的数据已准备好对视图模型?

+0

这将是巨大的,如果有人可以在标签“敲除AMD-助手”添加到了一个问题,我没有足够的声誉这样做 –

+1

似乎是这样的? http://stackoverflow.com/questions/7427146/knockout-applybindings-is-too-fast?rq=1 –

回答

1

在这种类型的情况下,将applyBindings已经发生了,所以你要么想只允许观察到部分更新的数据变得可用或控制使用ifwithtemplate绑定特定部分。

例如,你可以在你的包裹面积:

<div data-bind="if: articleTypes().length"> 
    .... 
</div> 
+0

谢谢。从性能角度来看,这是一个错误的路要走吗?我的理解是绑定将会多次改变(随着数据的加载)。我愿意以其他方式来构建这个。 –