2012-06-27 111 views
1

什么是绑定jQuery UI的对话框标题属性的最佳方式?最初,在ko.applyBindings上,KO成功更新了title属性。但是,调用.dialog()后,绑定将丢失。Knockout JS和jQuery UI对话框的标题属性

见琴:http://jsfiddle.net/jordanarseno/YFBsQ/4/

可以只是人工观察的KEYUP文本框,并使用作出修改标题:

$("input").live("keyup", function(){ 
    $("#dialog").dialog("option", "title", $(this).val()); 
}); 

但是,我想远离移动如果可能的话,遵循更多的Knockout约定。

这里最好的办法是什么?现在的问题是关于title属性,但它可以在理论上,适用于任何的对话的选项...

+1

在你的小提琴中为我工作 - 标题不断更新。 – Tomalak

+0

你确定你正在看title属性吗?我还投掷了一个''来显示绑定在容器内工作。标题就在'close'链接旁边,并且在'init'处保持不变,不管输入什么......不是吗?它为我做。换句话说,你应该看到_three_变化;文本框本身,跨度和标题。 –

回答

0

我已经知道使用subscribe功能。

function viewModel() { 
    var self = this; 
    self.title = ko.observable('title'); 

    self.title.subscribe(function(newValue) { 
    $('#dialog').dialog('option', 'title', newValue); 
    }); 
} 

jsfiddle it up

它在功能上非常相似的自定义绑定方法,但很多更简单。

查看this page的文档底部。

1

您可以尝试使用自定义绑定:

ko.bindingHandlers.ko_dialog = { 
    init: function (element, valueAccessor) { 
     $(element).dialog({title: ko.utils.unwrapObservable(valueAccessor())}); 

    }, 
    update: function (element, valueAccessor) { 
     $(element).dialog("option", "title", ko.utils.unwrapObservable(valueAccessor())); 
    } 
}; 

,并调用它以这种方式:

<div id="dialog" data-bind="ko_dialog: textboxinput"> 

我试图编辑您的小提琴,但由于某种原因,没有对的jsfiddle工作,但它的作品在我的本地PC!只是试一试... http://jsfiddle.net/YFBsQ/31/

0

另一种选择:计算 - 这些将在属性更改时调用,最终可以更新模型。 jQuery UI的工作原理是创建一个内部元素,将ID插入到命名模式中,因此您需要定位ID:“#ui-dialog-title-YourIdHere”...只需创建一个包含信息的计算属性你需要,然后在元素中,通过调用jquery插入menthod到生成的UI元素: $(“#ui-dialog-title-YourIdHere”)。html(“使用模型变量更新标题”+ self.var1() +“)”);