我使用KnockoutJS数据绑定到一个页面,视图模型是由从一个AJAX调用使用mapping plugin的JSON响应,这样填充中间部分没有工作(没有计算的属性,它工作正常)。 “Brokers”是一个可观察数组,我想将计算值添加到数组中称为URL的每个元素。我将Brokers数组绑定到foreach,并且我想使用该URL作为锚的href
属性。有任何想法吗?KnockoutJS添加计算的值到可观察阵列
6
A
回答
12
好吧,如果你在各家券商想的网址,你必须将它添加到每个经纪人:
$.each(viewModel.Brokers(), function(index, broker){
broker.Url = ko.computed(function(){return 'BASEURLHERE/' + broker.BrokerNum();});
});
我猜BrokerNum是不会改变的,所以你可能也只是计算网址一次:
$.each(viewModel.Brokers(), function(index, broker){
broker.Url = 'BASEURLHERE/' + broker.BrokerNum();
});
您还可以在映射期间通过向ko.mapping.fromJS函数提供“create”回调来添加Url属性。详情请参阅mapping plugin docs。
如果你只需要网址绑定到HREF,只要绑定在html中(绑定的foreach内)表达:我经历过非常类似的问题,工作
<a data-bind="attr: {href: 'BASEURLHERE/' + BrokerNum()}">link to broker details</a>
11
我发现,你可以拦截代理对象的创建和使用映射选项参数插入自己的领域:
var data = { "Brokers":[{"BrokerNum": "2"},{"BrokerNum": "10"}] };
var mappingOptions = {
'Brokers': {
create: function(options) {
return (new (function() {
this.Url = ko.computed(function() {
return 'http://BASEURLHERE/' + this.BrokerNum();
}, this);
ko.mapping.fromJS(options.data, {}, this); // continue the std mapping
})());
}
}
};
viewModel = ko.mapping.fromJS(data, mappingOptions);
ko.applyBindings(viewModel);
下面是一个小提琴证明这一点:http://jsfiddle.net/pwiles/ZP2pg/
0
感谢彼得·怀尔斯我有非常类似的解决方案:
var ViewModel = function (data, ranges) {
var self = this;
this.productList = ko.observableArray();
var productListMapping = {
create: function (options) {
return (new (function() {
//this row above i don't understand...
this.len = ko.computed(function() {
//just test function returning lenght of object name
// and one property of this model
return this.name().length + ' ' + self.cons_slider_1();
}, this);
ko.mapping.fromJS(options.data, {}, this); // continue the std mapping
})());
}
}
this.cons_slider_1 = ko.observable(100);
ko.mapping.fromJS(data, productListMapping, this.productList);
};
一些差异: 我不映射到自己,但this.product。 输入JSON有像上面的例子“经纪人”没有父名:
var products = [
{ "id": "pp1", "name": "Blue windy" },
{ "id": "pp1", "name": "Blue windy" }];
所以在productMapping我打字只是“创建:”
但是,我不明白的是结构创建功能。有人可以解释为什么函数返回具有属性的新函数。难道不能简化它吗?
相关问题
- 1. knockoutjs - 可观察到的可观察值的对象的observableArray
- 2. 后期观察到阵列中KnockoutJS
- 3. jQuery的autocomple和可观察到的knockoutjs阵列
- 4. knockoutjs,通过自定义绑定修改时未观察到可观察阵列
- 5. 如何添加计算的可观测到knockoutjs映射
- 6. 在KnockoutJS中计算也可以是可观察的
- 7. KnockoutJS:可写计算可观察不更新
- 8. 嵌套可观察到的在KnockoutJS
- 9. KnockoutJS调用可观察性
- 10. 使用敲除将对象添加到可观察阵列
- 11. 计算可观察问题
- 12. knockoutjs如何映射嵌套观察到的阵列
- 13. 角 - rxjs可观察阵列
- 14. KnockoutJS可观察对象的可观察对象
- 15. knockoutjs可观察对象的可观察数组绑定
- 16. 可观察阵列来阵列(Rxjs)
- 17. 无法绑定到可观察阵列
- 18. 绑定到可观察阵列
- 19. 使可观察阵列的所有项目可观察
- 20. 淘汰赛观察阵列动态添加元素值为空
- 21. 如何计算按组的观察值?
- 22. 按行计算丢失的观察值
- 23. 具有可观察阵列的Knockout计算列未更新用户界面
- 24. 发帖KnockoutJS观察的阵列,以通过Ajax
- 25. 将列表项添加到可观察的收藏列表
- 26. 将可观察数据和计算数据推送到可观察数组
- 27. R - 将外推(lm)值添加到观察矩阵
- 28. 可观察到的序列
- 29. 在将值添加到可观察值前等待x秒
- 30. knockoutJS JSON没有转换为可观察
这种方法就像一个魅力! – Tobscher 2013-07-04 19:06:52