2013-03-19 42 views
0

嘗試創建自定義綁定,該自定義綁定將檢測兩個輸入框中的某一個的值何時發生更改,何時發生更改我想啓用「保存」按鈕。最初「保存」按鈕被禁用。 我似乎無法讓它檢測到事件,我試圖在兩個輸入框上使用isDirty標誌,所以如果任何一個檢測到更改,我會顯示'保存'按鈕。使用事件綁定來檢測用戶何時進行更改會更好嗎?我認爲自定義綁定會更好。 isDirty標誌正在爲我的錯誤消息顯示工作。無法檢測自定義綁定中的事件

HTML: 
<span>Global Percentage:</span> 
<input id="spaceGlobalPercentage" type="text" data-bind="value: globalPercent, valueUpdate: 'afterkeydown'" class="topInput" /> 

<span>Adjustment Factor:</span> 
<input type="text" data-bind="value: adjustmentFactor, valueUpdate: 'afterkeydown'"class="topInput" /> 

<input type = "button" class="submitPercentCancelButton" id="submitPercentButton" value="Save" data-bind="click: save, enable: enableButton, buttonVisible: enableButton"> 

//定義綁定

ko.bindingHandlers.buttonVisible = { 
    update: function (element, valueAccessor) { 
     //var value = valueAccessor(valueAccessor()); 
     //var buttonUnwrapped = ko.utils.unwrapObservable(value); 

     var value1Unwrapped = ko.utils.unwrapObservable(valueAccessor(my.vm.globalPercent.isDirty)); 
     var value2Unwrapped = ko.utils.unwrapObservable(valueAccessor(my.vm.adjustmentFactor.isDirty)); 

     if (value1Unwrapped || value2Unwrapped) {    
      my.vm.enableButton(true); 
     } 
    } 
}; 

//檢查,如果事情發生了轉變

ko.subscribable.fn.trackDirtyFlag = function() { 
     var original = this(); 

     this.isDirty = ko.computed(function() { 
      return this() !== original; 
     }, this); 

     return this; 
    }; 

//視圖模型

my.vm = { 
     globalPercent: ko.observable("").extend({ required: "Enter a Global Percent, between 1 and 100." }).trackDirtyFlag(), 
     adjustmentFactor: ko.observable("").extend({ required: "Enter an Adjustment Factor, between 1 and 100." }).trackDirtyFlag(), 
     enableButton: ko.observable(false), 

..... };

//申請綁定

ko.applyBindings(my.vm); 

感謝任何建議或協助

+0

你能不能把它放在一個的jsfiddle? – WolfgangCodes 2013-03-20 01:22:33

回答

0

似乎是一個自定義的結合可能是在這種情況下太多。我會使用基於每個字段的isDirty狀態ko.computed

var vm = { 
    globalPercent: ko.observable("").extend({ 
     required: "Enter a Global Percent, between 1 and 100." 
    }).trackDirtyFlag(), 
    adjustmentFactor: ko.observable("").extend({ 
     required: "Enter an Adjustment Factor, between 1 and 100." 
    }).trackDirtyFlag(), 
    save: function() { 
     alert('saved'); 
    } 
}; 

vm.enableButton = ko.computed(function() { 
    return this.globalPercent.isDirty() || this.adjustmentFactor.isDirty(); 
}, vm); 

例子:http://jsfiddle.net/82wkk/

+0

謝謝安德魯,作品完美。好建議。 – LRP 2013-03-20 17:15:20

+0

@LRP:沒問題!樂意效勞。 – 2013-03-20 17:35:56

相關問題