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沒有填充,我看不到任何鏈接顯示在我的頁面。
任何指針?
感謝
是的,這工作,但我不得不定義global_nav_dropdown_items作爲一個正常的陣列,而不是觀察到的陣列。如果我將global_nav_dropdown_items定義爲ko可觀察數組,如示例所示,self.globalNavItems(global_nav_dropdown_items);不起作用。 – user3792795 2014-10-06 09:29:11
啊對不起 - 錯過了,因爲定義是從側面滾動:)是 - 這只是一個正常的數組傳遞進來。同樣的事情適用於任何一種方式 - 只要你給'self.globalNavItems'分配了新的東西,它就是不再是頁面最初綁定的觀察值,所以綁定不會在變化上發生變化。這是需要注意的事情 - 如果你發現自己的某些事情應該被觀察到,這可能是錯誤的:) – 2014-10-06 09:31:41
感謝您的解釋,詹姆斯。 – user3792795 2014-10-06 09:38:13