挖空解包可观察对象无法按预期工作
Knockout unwrap observable does not work as expected
我做了一个图标自定义绑定,如果我做这样的事情,它可以正常工作
<div data-bind="icon: 'icon-name'"></div>
我希望图标是可变的,因此在我的视图模型中我有:
var element = {
icon: ko.computed(function() {
return 'icon-' + iconType();
}
}
在我的 html 中,我有:
<div data-bind="icon: ko.utils.unwrapObservable(icon)"></div>
但这行不通。请注意,如果我像这样插入另一个div:
<div data-bind="text: ko.utils.unwrapObservable(icon)"></div>
我得到一个div,上面有我想要的图标的名称,让我们说"icon-1"。
所以我的猜测是 unwrapObservable 不会以我需要的格式为我提供文本。
有什么想法可以解决这个问题吗?
图标绑定:
ko.bindingHandlers.icon = {
init: function(element, valueAccessor) {
var icon = ko.unwrap(valueAccessor());
$(element).html(icons[icon]);
}
}
而不是 init
,您需要处理 update
,因为当值发生变化时,这就是计算中发生的事情:
ko.bindingHandlers.icon = {
update: function(element, valueAccessor) {
var icon = ko.unwrap(valueAccessor());
$(element).html(icons[icon]);
}
}
然后,您应该能够正常绑定,而无需在绑定中上包装值:
<div data-bind="icon: icon"></div>
关于init
,文档说:
Knockout 将针对使用绑定的每个 DOM 元素调用一次 init 函数。初始化有两个主要用途:
- 设置 DOM 元素的任何初始状态
- 注册任何事件处理程序,以便例如,当用户单击或修改 DOM 元素时,您可以更改关联的可观察量的状态
IE这里没有必要,您可以通过update
做您需要的一切。
相关文章:
- 读取在具有IE的工作程序中生成的对象URL
- 我怎样才能让jQuery即使在尚未创建的对象上也能工作
- JSON.stringify没有'在更改的对象上无法按预期工作.如何处理
- 如何让我的正则表达式代码在我的dojo cellWidget对象上工作
- dropable的Over事件是't工作正常,在可拖动对象被拖放到贪婪的可拖动对象上并再次拖动后
- 地图如何在 Ecmascript 6 中使用对象键工作
- 了解 JavaScript 对象实例或工作流
- JavaScript 返回对象未按预期工作
- 如何让、要求和原型协同工作以在 javascript 中制作对象
- 谷歌应用程序脚本-正在尝试使用getUrl.TypeError:在对象工作表中找不到函数getUrl
- 一个对象怎么能像返回自身和另一个对象一样工作
- "键“;jQuery中的对象无法正常工作
- 对象引用的隐式传递是如何工作的
- dojo类对象的工作原理
- app.use(restify.bodyParser())无法工作,因为req对象为空
- 从服务器端将属性绑定到套接字对象;似乎不能正常工作
- 为什么mongoose.connect()在mongoose对象上没有作为方法出现时工作得很好
- 在 JavaScript 不工作对象中连接两个变量
- JS循环插件在IE11中不工作.对象不支持属性或方法循环
- Javascript 对象:如何创建包含工作对象的封装