2013-08-05 30 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

謝謝。從性能角度來看,這是一個錯誤的路要走嗎?我的理解是綁定將會多次改變(隨着數據的加載)。我願意以其他方式來構建這個。 –