2014-04-28 26 views
1

我最近發現這個偉大的組件 - >Knockout-Kendo.js使用具有Knockout-Kendo.js的ViewModel的當前屬性值

我用它來處理一些kendoComboBox的行爲。

與視圖模型的同步完美地工作。

我想要聽取控件的更改以根據當前選定的值執行某些操作。

我沒有看到任何可綁定在'data-bind'屬性中的屬性來偵聽更改,但我知道在內部,knockout-kendo組件監聽更改,這就是viewmodel能夠通過同步與控制。

如果我嘗試聆聽控件的valueChange事件,問題是我的事件處理程序在viewmodel之前捕獲,並且在我的事件處理程序中運行時,我只具有使用viewmodel的控件的前一個值。

查看組件中的綁定配置。我的理解是我可以使用telerik控件的'enabled','search','data','value'和其他任何暴露的屬性。最好是在data-bind屬性中定義一個屬性'change',並在我的viewmodel中鏈接一個eventhandler,並確保我的eventhandler會在knockout-kendo組件的內部事件處理程序之後被調用。

createBinding({ 
    name: "kendoAutoComplete", 
    events: { 
     change: VALUE, 
     open: { 
      writeTo: ISOPEN, 
      value: true 
     }, 
     close: { 
      writeTo: ISOPEN, 
      value: false 
     } 
    }, 
    watch: { 
     enabled: ENABLE, 
     search: [SEARCH, CLOSE], 
     data: function(value) { 
      ko.kendo.setDataSource(this, value); 
     }, 
     value: VALUE 
    } 

});

我知道我可以嘗試修改事件綁定的順序,以確保我的eventhandler必須在viewmodel同步後調用,但我認爲這是一個非常糟糕的做法。

有人有一個想法,我可以如何解決這個問題與優雅?

回答

1

您還沒有提到爲什麼你想這樣做。我可以想象兩個原因:

  • 觸發一些UI行爲/邏輯直接;
  • 觸發業務邏輯(當然也可能觸發UI更改);

對於在後一種情況下登陸此問題的人,這裏有一個替代解決方案。 (這個答案可能不是直線上升答案OP的問題,但似乎很有益的張貼在這裏)


假設你有這個基本視圖模型:

var ViewModel = function() { 
    var self = this; 
    self.kendoObservable = ko.observable("Some text") 
}; 

有兩種你可以通過間接地迴應Kendo的變化。首先,對於簡單的情況下,有computed observables

// Option 1, add this to ViewModel 
    self.dependentObservable = ko.computed(function() { 
     return self.kendoObservable() === "" ? "Empty" : "Not empty"; // example 
    }); 

dependentObservable將每一次修改的kendoObservable變化。基本的東西。

如果您想在kendoObservable更改時做更復雜的操作,例如,做一個AJAX調用或諸如此類的東西,你可能需要一個manual subscription

// Option 2, add this to ViewModel 
    self.kendoObservable.subscribe(function(newValue) { 
     // Possibly do an AJAX call here or whatnot. Example: 
     alert("The new value is: " + newValue); 
    }); 

這將允許你每次解僱一些複雜的邏輯kendoObservable變化。 AFAIK你需要檢查自己newValue是否實際上是改變了的值,至少在某些版本的KO中。

+1

+1非常感謝Jeroen。通過'訂閱',我可以做到我想要的。在Knockout網站的文檔部分閱讀時,答案就在我的臉上。 – Samuel

相關問題