正在触发Knockout JS中子属性的订阅事件
Triggering subscribe event for children properties in Knockout JS
我在Knockout中触发订阅事件时遇到一些问题。我有一组Schemas,每个Schemas包含若干天。我想在一天的时间戳发生变化时触发我的订阅事件,而不仅仅是在Schema数组发生变化时。
到目前为止,这是我的代码。当从Schemas数组中添加或删除Schema时,底部的订阅事件会触发。但当任何子属性发生更改时,则不会。
{"schemas":[
{"days":[
{"from":"12:00","to":"17:00"},
{"from":"06:30","to":"17:00"},
{"from":"06:30","to":"17:00"},
...
]},
{"days":[
{"from":"06:30","to":"17:00"},
{"from":"06:30","to":"17:00"},
{"from":"06:30","to":"17:00"},
...
]}
]}
var Schema = function(data, parent, index) {
var self = this;
ko.mapping.fromJS(data, {}, self);
};
var SchemaViewModelMapping = new (function() {
var self = this;
self.index = 0;
self.schemas = {
create: function(options) {
self.index++;
return new Schema(options.data, options.parent, self.index);
}
};
self.index = 0;
})();
var SchemaViewModel = function() {
ko.mapping.fromJS(data, SchemaViewModelMapping, self);
self.schemas.subscribe(function(value) {
**Let me do something when a DAY changes here!!!**
});
}
var ViewModel = new SchemaViewModel;
ko.applyBindings(ViewModel);
根据@JamesThorpe的建议,我更新了我的代码如下:
我添加了一个新的Day对象,从中添加了我的订阅,我从Schema实例化了它。
{"schemas":[
{"days":[
{"from":"12:00","to":"17:00"},
{"from":"06:30","to":"17:00"},
{"from":"06:30","to":"17:00"},
...
]},
{"days":[
{"from":"06:30","to":"17:00"},
{"from":"06:30","to":"17:00"},
{"from":"06:30","to":"17:00"},
...
]}
]}
var Day = function(data) {
var self = this;
self.from = ko.observable(data.from);
self.to = ko.observable(data.to);
self.from.subscribe(function() {
**Doing my subscribe magic...**
});
self.to.subscribe(function() {
**Doing my subscribe magic...**
});
};
var Schema = function(data, parent, index) {
var self = this;
ko.mapping.fromJS(data, {}, self);
self.days = ko.observableArray();
data.days.forEach(function(day) {
self.days.push(new Day(day));
});
};
var SchemaViewModelMapping = new (function() {
var self = this;
self.index = 0;
self.schemas = {
create: function(options) {
self.index++;
return new Schema(options.data, options.parent, self.index);
}
};
self.index = 0;
})();
var SchemaViewModel = function() {
ko.mapping.fromJS(data, SchemaViewModelMapping, self);
self.schemas.subscribe(function(value) {
**Let me do something when a DAY changes here!!!**
});
}
var ViewModel = new SchemaViewModel;
ko.applyBindings(ViewModel);
相关文章:
- 如何使用jquery迭代具有相同属性的html元素并查找onclick事件
- JavaScript-动态SVG-onload属性-未触发事件
- 手柄'img'单击事件并插入'alt'使用jQuery将属性转换为文本框
- JQuery:使用clone()生成的元素不采用原始的事件属性
- JS事件未更改输入禁用属性
- 从其他元素上的单击事件访问image src属性
- 使用自定义数据属性或将数据绑定到处理程序来处理事件
- 如何从jQuery的事件对象中检索属性
- 更改el属性时未激发主干视图事件
- SVG-全局属性和事件的列表
- jQuery:使用实时事件添加tabindex属性
- 选中javascript中的属性集时,复选框更改事件未触发
- 我想从使用onkeypress事件的文本区域获取一个属性
- 取消 iframe 中具有 target=“_parent” 属性的链接事件
- datalist获取选定的值和自定义属性(无事件)
- Google事件侦听器:未捕获类型错误:无法读取属性'addEventListener'为null
- 将属性添加到窗元素时是否引发事件
- 更改视图属性 事件聚合器 Aurelia
- 在'onmouseover'中修改HTML's CSS属性事件
- jQuery中的自定义属性事件