2014-05-24 78 views
5

看看在MVVM例子here更新劍道NumericTextBox與MVVM上旋

我怎樣才能獲得MVVM值對自旋事件更新(點擊向上或向下箭頭)

這裏是我的嘗試:

在旋轉時,我試圖做

$("#ntb").getKendoNumericTextBox().trigger("change"); 

這工作,但有怪異 副作用。

如果DOM上有足夠的元素,旋轉事件將繼續觸發。

另一種方式來重現此是取代碼從here (jsbin)

在一個HTML文件中插入它,在鉻或FF加載它,然後在該行中插入一個斷點:

$("#ntb").getKendoNumericTextBox().trigger("change"); 

繼續點擊,你會看到一次又一次的點擊。

在firefox中,如果我的DOM足夠大,我會得到沒有斷點的repro。

回答

3

我檢查了你的jsbin,我在html和javascript中看到了一些錯誤。我想,當你測試不同的代碼時,你忘了糾正它。無論如何,我清理並更正您的代碼,並將它們放到jsfiddle

把斷點後(debugger;)我看到你是對的onSpin事件無限觸發,但這個奇怪的行爲發生,如果你在事件中放置一個斷點。如果您刪除斷點並在彈簧event triggered.");上輸入console.log(",則表示一切正常,並且該事件僅觸發一次。

我以前遇到過不同場景下的這類問題,例如使用alert()而不是console.log()來進行調試。


代碼:

var viewModel = kendo.observable({ 
    selectedNumber: 0, 
    isEnabled: true, 
    isVisible: true, 
    onSpin: function() { 
     //debugger; 
     console.log("`onSpin` event triggered."); 
     $("#ntb").getKendoNumericTextBox().trigger("change"); 
    }, 
    onChange: function() {} 
}); 
kendo.bind($("#example"), viewModel); 
+0

感謝清理和確認我的攝製下的變化情況,很高興知道我不瘋狂。問題是在Firefox中,它的repros沒有斷點。Chrome和IE都很好。 – Matt

+0

@Matt我只是在IE10和FF29測試,他們都沒有repro問題沒有斷點!打開ff控制檯並轉到jsfiddle單擊旋轉僅爲每次點擊觸發'onSpin'一次。 –

+0

不好意思,如果DOM很大,它會在FF中重現,我應該指定 – Matt

1

劍道表示支持在自旋事件運行此:

this.set('selectedNumber', e.sender.element.val()); 

這讓問題消失。

+0

+1,快樂你的問題解決了。 –

0

您可以嘗試下面的代碼。這個對我有用。

視圖模型

viewModel.bind("change", function (e) { 
     console.log("property Changed on spin "); 
    }); 

剃刀代碼

<input id="tbSlideDuration" data-role="numerictextbox" 
          data-format="#" 
          data-min="1" 
          data-max="100" 
          data-bind="value:slideDuration, events: {spin:change}" /> 

這將調用引擎蓋:)