使用Kendo的动态HTML元素绑定
Dynamic HTML Element Binding Using Kendo
以下是我目前所处的场景:我有三个HTML元素。一个称为shipToAddress的文本框,另一个名为deliveryToAddress的复选框,以及一个名"sameAsShipToAddress"的复选框。
然后,我在幕后有一个剑道视图模型,其中包含一个名为address的变量,该变量将包含一个地址字符串,例如:"123 Main Street"。
当页面第一次加载时,shipToAddress元素数据绑定到kendo视图模型的地址变量,例如:"123 Main Street"。deliveryToAddress在最初加载页面时没有数据绑定。然而,一旦选中sameAsShipToAddress复选框,我想向deliveryToAddress添加一个数据绑定属性,这样它也会查看kendo视图模型的地址变量。
这是HTML:
<input id="shipToAddress"
data-bind="value: address" />
<input type="checkbox"
id="deliverSameAsShipTo"
value="deliverSameAsShipTo"
data-bind="checked: sameAsShipToAddress,
events: { click: differentDeliveryAddress }" />
<input id="deliverToAddress" />
这是后台剑道视图模型:
var _vm = kendo.observable({
address: "",
sameAsShipToAddress: false,
differentDeliveryAddress() {
if (!this.sameAsShipToAddress)
$("#deliverToAddress").attr("data-bind", "value: address");
else
$("#deliverToAddress").removeAttr("data-bind");
}
});
这能做到吗?我觉得我已经接近下面的代码了,但目前还没有设置deliveryToAddress的value属性。我需要了解如何刷新deliveryToAddress元素的属性吗?
您的代码工作正常,非常接近最终解决方案。不设置绑定字段的值,而是将"绑定定义"设置为属性值:
$("#deliverToAddress").attr("data-bind", "value: address");
ViewModel已经双向绑定,因此重新绑定模型和绑定将双向工作。
添加属性(从而绑定到ViewModel的address
字段)后,还需要设置deliverToAddress
字段的值。之后。解除绑定(在此处将值设置为空字符串)工作正常-您可以使用浏览器DOM资源管理器看到添加了属性-更改地址文本并单击测试按钮-deliveryToAddress也会更改。
我在Telerik Dojo中创建了一个示例。
视图模型代码如下(我添加了一个按钮来测试行为):
$(document).ready(function(){
var vm = kendo.observable({
address: "",
sameAsShipToAddress: false
});
kendo.bind(document.body, vm);
//
$("#setDeliverAddressButton").kendoButton({
click: function(e) {
console.log(vm.sameAsShipToAddress);
if (vm.sameAsShipToAddress) {
$("#deliverToAddress").attr("data-bind", "value: address");
$("#deliverToAddress").val(vm.address);
}
else {
$("#deliverToAddress").removeAttr("data-bind");
$("#deliverToAddress").val("");
}
}
});
$("#triggerChangeButton").kendoButton({
click: function(e) {
kendo.bind(document.body, vm);
}
});
});
HTML:
<input id="shipToAddress" data-bind="value: address" />
<input type="checkbox"
id="deliverSameAsShipTo"
value="deliverSameAsShipTo"
data-bind="checked: sameAsShipToAddress" />
<input id="deliverToAddress" />
<button role="button" id="setDeliverAddressButton">set deliver address</button>
双向更新
另一种选择(甚至您需要始终这样做)是以程序方式触发更改,如本讨论中所述:如何在程序更改后更新ViewModel。
- 将动态元素绑定到函数;只剩下一个绑定
- Knockout绑定是膨胀的html(表单元格),如何使用javascript创建绑定或从父元素绑定
- 使用Kendo的动态HTML元素绑定
- 将多个元素绑定到同一onclick
- 如何在AJAX驱动的应用程序中优化元素绑定
- 使用AngularJS UI路由器时出现元素绑定问题
- 如何将 DOM 元素绑定到自定义 $.touchpress 事件
- 如何在React Native中为ListView中的每个元素绑定函数
- 对克隆的image元素绑定onclick事件
- 将DIV元素绑定到溢出滚动条
- 使用ng repeat将表单元素绑定到角度中的新对象
- 将元素绑定到不同帧中的现有 AngularJS 作用域
- KNOCKOUTJS 将多个输入元素绑定到一个可观察量
- 如何将两个 html 元素绑定在一起,当第一个元素被删除时,第二个元素也从 DOM 中删除
- OOJS-将每个元素绑定到一个特定的点击
- 真正阻止元素绑定-取消绑定元素-AngularJS
- 如何在jQuery中将多个元素绑定到多个事件
- Vue.js-将同名的无线电元素绑定到数组
- 将两个数组元素绑定为一个
- Flotr2 -安全地销毁图形元素以及为该元素绑定的所有事件