我有一個自定義綁定,ko.bindingHandlers.editBinding
,做了很多魔術的東西。其中一個是readonly參數,用於控制是否允許編輯引用的observable選項。自定義綁定viewmodel和controlsDescendantBindings不更新
<div data-bind="editBinding: { type: 'text', prop: OrderContactName, readonly: CurrentOrderSystemStatusID() != 1 }"></div>
的只讀的結合是比較新的,並通過外部事件在會話期間可以改變。所以,當它發生變化時,所有當前正在編輯的小部件都需要放棄所有更改並關閉並隱藏編輯功能。
我的自定義虛擬機有一個計算readonly,它不會更新時,它傳遞到依賴性,我不明白爲什麼。
self.readOnly = ko.computed(function() {
return ko.utils.unwrapObservable(valueAccessor().readonly) || false;
});
也很有趣:
self.toggleFunc = function() {
var isEditing, otherEditingVM, _ref;
//this works
//original coffeescript
//#if valueAccessor()?.readonly and ko.utils.unwrapObservable valueAccessor().readonly is true then return
//if (((_ref = valueAccessor()) != null ? _ref.readonly : void 0) && ko.utils.unwrapObservable(valueAccessor().readonly === true)) {
//this doesn't
if (self.readOnly()) {
return;
}
基地標記
<div data-bind="editBinding: { type: 'text', prop: OrderContactName, readonly: CurrentOrderSystemStatusID() != 1 }"></div>
當我移動到只讀它的工作原理視圖模型!爲什麼?不敲除評估內聯表達式來計算反正?
self.ShouldBeReadOnly = ko.computed(function() { return self.CurrentOrderSystemStatusID() === 0;})
<div data-bind="editBinding: { type: 'text', prop: OrderContactName, readonly: ShouldBeReadOnly }"></div>
我拉了一堆東西出來,並就您的觀賞樂趣一個漂亮的jsfiddle - http://jsfiddle.net/scaryman/QDgde/3/
編輯
淘汰賽只是不工作,我認爲它做的方式。如果我將邏輯移動到viewModel中的計算中,它可以工作(請參閱更新),並且如果我用ko.computed包裝內聯邏輯,它也可以工作。
<div data-bind="editBinding: { type: 'text', prop: OrderContactName, readonly: ko.computed(function() {return CurrentOrderSystemStatusID() != 1;}) }"></div>
這仍然爲什麼下面的代碼在事件處理程序工作不給我解釋
//#if valueAccessor()?.readonly and ko.utils.unwrapObservable valueAccessor().readonly is true then return
if (((_ref = valueAccessor()) != null ? _ref.readonly : void 0) && ko.utils.unwrapObservable(valueAccessor().readonly === true)) {
感謝您的延伸解釋。 – scaryman