我一直在通過KnockoutJS文檔工作,並嘗試修改此page中的「可寫計算觀察值」部分的示例3。這是一個KnockoutJS錯誤還是我做多個綁定錯誤?
該示例基本顯示一個文本框,並在用戶輸入一個非數字值到文本框時顯示一條消息。我試圖修改代碼,以便在出現消息時文本框具有粉紅色背景。
問題是當你輸入一個無效的值時,文本框變成粉紅色,但是你輸入的值被替換爲原來的值。我不知道爲什麼會發生這種行爲,因爲在我添加樣式綁定以獲取粉紅色背景之前,一切正常。嘗試移除樣式綁定,並注意輸入無效值時行爲如何變化。
這是怎麼回事?
該代碼在下方或試用此jsfiddle。
<p>
Enter a numeric value:
<input data-bind="value: attemptedValue
,style: {backgroundColor: lastInputWasValid() ?
'transparent' :
'pink' }"/>
</p>
<div data-bind="visible: !lastInputWasValid()">That's not a number!</div>
function MyViewModel() {
this.acceptedNumericValue = ko.observable(123);
this.lastInputWasValid = ko.observable(true);
this.attemptedValue = ko.computed({
read: this.acceptedNumericValue,
write: function (value) {
if (isNaN(value))
this.lastInputWasValid(false);
else {
this.lastInputWasValid(true);
this.acceptedNumericValue(value); // Write to underlying storage
}
},
owner: this
});
}
ko.applyBindings(new MyViewModel());
編輯:這是另一個fiddle與樣式綁定刪除。嘗試追加字母'a'並將焦點從文本框中移出。注意字母'a'如何留在那裏。嘗試使用原始fiddle文本框,並注意它是如何刪除的。這兩個小提琴之間唯一的變化就是風格綁定的存在。
你有沒有嘗試刪除喜歡我的風格結合提到?只要這樣做,行爲就會發生變化,以便無效值保留在文本框中而不是被刪除。這裏有一個新的[小提琴](http://jsfiddle.net/6JzJ8/),並刪除了樣式綁定。嘗試追加字母'a'並注意它如何停留在那裏。試着用原版小提琴做這件事,當你附加字母'a'並離開文本框時注意區別。 – xTRUMANx 2012-02-26 06:01:13