关于knockoutjs 的自定义 bindings
需求: 自定义bindings,使其可调用swfobject更新正在播放的flash的值
查看knockoutjs的官方可进行自定义扩展 文档位置
于是尝试:
(function(){
ko.bindingHandlers['flash'] = {
'update': function(element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor());
swfobject.embedSWF(value, element.id, "200", "120", "9.0.0");
}
};
})();
jade代码如下:
div#aa(data-bind='flash : swfurl')
js代码:
var viewModel = {
swfurl: ko.observable("/flashs/1.swf")
};
ko.applyBindings(viewModel);
但是除了第一次赋值以外,当swfurl值改变时 (如调用如下方法时)并不会触发’update’的逻辑
function gos1(){
viewModel.swfurl('/flashs/1.swf');
}
求救
2 回复
问题解决了。。分享下吧。。。 内啥 表吐槽我的英文水平就好。。 http://groups.google.com/group/knockoutjs/browse_thread/thread/33a88399bb993c3b
伟大的墙。。我把代码捞回来了 大致原因是 swfobject会重新创建一个对象覆盖原先的对象 导致更新时间无法被调用。解决方案是,在内部新建一个div然后用swfobject去更新丫的。。
(function(){
var id = 0;
ko.bindingHandlers['flash'] = {
'update': function(element, valueAccessor) {
var swfid = element.id + "-swf";
if( !document.getElementById(swfid) ) {
var d = document.createElement('div');
d.id = swfid;
element.appendChild(d);
}
var value = ko.utils.unwrapObservable(valueAccessor());
swfobject.embedSWF(value, swfid, "550", "400", "9.0.0");
}
};})();