1

jQuery UIのダイアログタイトル属性をバインドする最良の方法は何ですか? 最初にko.applyBindings、KO は title 属性を正常に更新します。ただし、.dialog()が呼び出された後、バインディングは失われます。

フィドルを参照してください: http://jsfiddle.net/jordanarseno/YFBsQ/4/

キーアップのテキストボックスを手動で観察し、次を使用してタイトルを変更できます

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

しかし、私はそれから離れて、可能であればよりノックアウトの慣習に従いたいと思っています.

ここで最善のアプローチは何ですか?質問はタイトル属性に関するものですが、理論的には、ダイアログのオプションのいずれにも適用できます...

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で機能しませんでしたが、私のローカルPCでは機能します!試してみてください... 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"...単純に、情報を含む計算されたプロパティを作成します。必要な場合は、要素内で、生成された UI 要素に jquery 挿入メソッドを次のように呼び出します。 ")");

于 2012-10-06T00:18:44.477 に答える