2014-10-06 45 views
0

我必須在許多頁面中顯示模板。我正在嘗試使用淘汰賽。填充KO Observable數組中的問題

我有以下內容的index.html文件:

<head> 
<script data-main="js/main" src="js/libs/require/require.js"></script> 
</head> 
<body> 
    <header> 
    <div id='div1' data-bind="template: {name: 'testTemplate'}"></div> 
    </header> 
</body> 

testTemplate.html如下:

<div>   
    <button data-bind="click:function(data){$root.test(data)}">Test</button> 
    <!-- ko foreach: globalNavItems -->   
    <p> <a data-bind="text: label, attr:{href: url}"> <span class=""></span> 
    </a></p>   
    <!-- /ko -->  
    </div> 

我想成爲按鈕測試點擊填充globalNavItems。 我main.js如下:

require(['knockout', 'jquery', 'text!../patterntemplates/testTemplate.html'],  
function(ko, $, t0)  {   
    function headerViewModel() { 
    var self=this; 
    self.globalNavItems =ko.observableArray([]);      



self.test = function(data){ 
     global_nav_dropdown_items = 
                          ko.observableArray([{"label":                     "preferences","url":"Menu.html"},     
{"label": "help","url": "#"},     
{"label": "about","url": "#"}, 
{"label": "sign out","url": "#"}]); 
     self.globalNavItems=global_nav_dropdown_items; 
     }   


     }   
     oj.koStringTemplateEngine.install();   
     ko.templates["testTemplate"] = t0;   
     $(document).ready(function() {    
     ko.applyBindings(new headerViewModel(),      
     document.getElementById('div1'));   
     });   
     }); 

我可以看到在運行的index.html按鈕。點擊按鈕時,方法測試也被調用,但globalNavItems沒有填充,我看不到任何鏈接顯示在我的頁面。

任何指針?

感謝

回答

0

這行是有問題之一:

self.globalNavItems=global_nav_dropdown_items; 

通過運行此,您要更換隻是一個普通的JavaScript數組定義observableArray,而且它不再綁定到頁面。您需要更新可觀察到的通過它的接口,而不僅僅是分配給變量:

self.globalNavItems(global_nav_dropdown_items); 
+0

是的,這工作,但我不得不定義global_nav_dropdown_items作爲一個正常的陣列,而不是觀察到的陣列。如果我將global_nav_dropdown_items定義爲ko可觀察數組,如示例所示,self.globalNavItems(global_nav_dropdown_items);不起作用。 – user3792795 2014-10-06 09:29:11

+0

啊對不起 - 錯過了,因爲定義是從側面滾動:)是 - 這只是一個正常的數組傳遞進來。同樣的事情適用於任何一種方式 - 只要你給'self.globalNavItems'分配了新的東西,它就是不再是頁面最初綁定的觀察值,所以綁定不會在變化上發生變化。這是需要注意的事情 - 如果你發現自己的某些事情應該被觀察到,這可能是錯誤的:) – 2014-10-06 09:31:41

+0

感謝您的解釋,詹姆斯。 – user3792795 2014-10-06 09:38:13