gpt4 book ai didi

javascript - 使用 Knockout-Kendo.js 处理 ViewModel 属性的当前值

转载 作者:行者123 更新时间:2023-11-28 01:20:25 25 4
gpt4 key购买 nike

我最近发现了这个很棒的组件 -> Knockout-Kendo.js .

我用它来处理 kendoComboBox 的一些行为.

与 View 模型的同步工作完美。

我想监听控件的变化,以根据当前选定的值执行一些操作。

我没有看到任何可以在“data-bind”属性中绑定(bind)来监听更改的属性,但我知道在内部,knockout-kendo 组件会监听更改,这就是 View 模型能够与控制。

如果我尝试监听控件的 valueChange 事件,问题是我的事件处理程序在 View 模型之前被捕获,并且在我的事件处理程序中运行时,我只使用 View 模型获得控件的先前值。

查看组件中的绑定(bind)配置。我的理解是我能够使用“启用”、“搜索”、“数据”、“值”以及 Telerik 控件的任何其他公开属性。最好的办法是在数据绑定(bind)属性中定义一个属性“change”,并在我的 View 模型中链接一个事件处理程序,并确保我的事件处理程序将在 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
}

});

我知道我可以尝试修改事件绑定(bind)的顺序,以确保在 View 模型同步后必须调用我的事件处理程序,但我认为这是一个非常糟糕的做法。

有人知道如何优雅地解决这个问题吗?

最佳答案

您还没有提到您为什么要这样做。为什么。我可以想象两个原因:

  • 直接触发某些 UI 行为/逻辑;
  • 触发业务逻辑(当然这可能反过来触发 UI 更改);

对于在后一种情况下遇到此问题的人,这里有一个替代解决方案。 (这个答案可能不是对OP问题的直接回答,但似乎足够有用,可以将其发布在这里。)

<小时/>

假设您有这个基本 View 模型:

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
});

每次kendoObservable发生变化时,这个dependentObservable都会被修改。基本的东西。

如果你想在 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 中是这样。

关于javascript - 使用 Knockout-Kendo.js 处理 ViewModel 属性的当前值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23331582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com