這裏是一個的jsfiddle這說明我的問題:http://jsfiddle.net/dDEd5/4/如何維護引用KnockoutJS中單擊事件的正確執行上下文?
總之,我有一個簡單的視圖模型:
ViewModel = function() {}
ViewModel.prototype = {
child: function() {},
children: new Array(3),
outermethod: function() {
this.innerMethod();
},
innerMethod: function() {
alert("ok!");
},
outerProperty: function() {
return this.innerProperty();
},
innerProperty: function() {
return "Property is OK";
}
}
我試圖用一個「點擊」綁定該視圖模型綁定。問題是當我的綁定使用$父上下文時,我的ViewModel中'this'的值無法解析到ViewModel。
例如,這種結合的作品罰款:
<div>
<span data-bind="text: outerProperty()"></span>
<button data-bind="click: outermethod">This Works</button>
</div>
然而,當我用另一種結合上下文和嘗試使用$家長打電話給我的ViewModel,事情打破。在以下兩個示例中,屬性解決得很好;然而,這兩個按鈕的錯誤了:
<div>
<!-- ko with: child -->
<span data-bind="text: $parent.outerProperty()"></span>
<button data-bind="click: $parent.outermethod">This Doesn't</button>
<!-- /ko -->
</div>
和
<div>
<!-- ko foreach: children -->
<span data-bind="text: $parent.outerProperty()"></span>
<button data-bind="click: $parent.outermethod">These Don't Either</button>
<!-- /ko -->
</div>
我已經做了我的盡職調查試圖瞭解執行上下文中是如何工作的JavaScript以及爲什麼這些實例失敗;然而,我對此感到不知所措。
完美,謝謝你的回答。 – Jonathan