2013-02-15 85 views
3

請參閱下面的簡單示例;一個綁定到計算的observable的文本框。我的問題是IE在文本框更新時調用方法兩次。 Firefox和其他瀏覽器似乎沒有這個問題。我在IE 7 &中觀察到這個問題8.knockout.js計算可觀察性在Internet Explorer中調用兩次

首先,我做錯了什麼?如果不是,那麼建議的方法是什麼?

<script> 
    var viewModel = { 
     myTestVar: "aaa" 
    }; 

    viewModel.myTest = ko.computed({ 
     read: function() { 
      return viewModel.myTestVar; 
     }, 
     write: function (value) { 
      alert(value); 
      viewModel.myTestVar = value; 
     }, 
     owner: viewModel 
    }); 

    $(document).ready(function() { 
     ko.applyBindings(viewModel); 
    }); 
</script> 
</head> 
<body> 
    <input data-bind="value:myTest",type="text" style="width:150px;" /> 
</body> 

回答

1

value綁定有一個特殊的部分用於處理Internet Explorer中的自動完成。這通常會導致兩次寫入。你可以關閉它,如果你不關心自動完成,通過添加屬性到input

<input data-bind="value:myTest" type="text" style="width:150px;" autocomplete="off" /> 
+0

謝謝,這工作!寫入方法現在只被調用一次。 – Per 2013-02-15 21:22:24

+0

這對IE 10標準文檔模式下的IE 10沒有幫助。我瀏覽了KO調試版本的代碼,在'value'綁定檢查中'element.autocomplete'是'undefined',導致註冊了雙重事件處理程序。你知道這是否有一個公開的問題,或者是否已經解決? – 2013-10-15 13:51:25

+0

它似乎是IE10兼容模式下的一個錯誤。我不知道有什麼公開的問題。 – 2013-10-15 21:30:46

0

試試這個:

write: function (value) { 
    if(value != viewModel.myTestVar) { 
     alert(value); 
     viewModel.myTestVar = value; 
    } 
} 

由於viewModel.myTestVar不是可觀察到的,我沒有一個好主意,爲什麼寫叫兩次,但檢查應防止實際多寫。