1

绑定 jQuery UI 的 Dialog 标题属性的最佳方法是什么?最初,在 上ko.applyBindings,KO 成功更新了 title 属性。但是,在.dialog()调用之后,绑定会丢失。

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

可以手动观察 keyup 的文本框并使用以下方法更改标题:

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

但是,如果可能的话,我想摆脱它并遵循更多的淘汰赛惯例。

这里最好的方法是什么?问题是关于 title 属性,但理论上它可以应用于任何 Dialog 的选项......

4

3 回答 3

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 上工作,但它可以在我的本地电脑上工作!试一试... http://jsfiddle.net/YFBsQ/31/

于 2012-06-27T14:15:13.397 回答
0

我已经知道为此使用订阅功能。

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

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

把它搞定

它在功能上与自定义绑定方法非常相似,但更直接。

查看本页底部的文档。

于 2012-07-24T19:27:10.603 回答
0

另一个选项:Computed - 这些将在属性更改时调用,最终可以更新您的模型。jquery UI 通过创建一个将 ID 插入到其命名模式中的内部元素来工作,因此您需要定位 ID:“#ui-dialog-title-YourIdHere”...简单地说,只需创建一个包含信息的计算属性您需要然后在元素内,通过以下方式调用 jquery 插入方法到生成的 UI 元素: $("#ui-dialog-title-YourIdHere").html("Updated Title with model vars" + self.var1() + ")");

于 2012-10-06T00:18:44.477 回答