3

次のカスタムバインディングがあります

ko.bindingHandlers.dialogFor = {
    init: function(el, valueAccessor) {
        $(el).dialog();
        var val = valueAccessor();
        if(ko.isObservable(val))
            $(el).on('dialogclose', function(){ 
                val(null) 
            }); 
    }
};

これにより、observable を設定するだけで、html フラグメントにdialogForバインディングをタグ付けしてダイアログを開くことができます。

残念ながら、渡された値は常にアンラップされるため、if チェックは決してパスせず、ダイアログを閉じたときにオブザーバブルをリセットすることはできません。

アンラップされた値だけでなく、渡された実際のオブザーバブルを取得するにはどうすればよいですか?

4

1 に答える 1

1

私はあなたのHTMLを見ることができないので、それは推測です。カスタムバインディングの値でオブザーバブルを使用していると思います:

   <div data-bind="dialogFor: val()"></div>

はいの場合は、すでに値をアンラップしており、オブザーバブルではない値のみがカスタムバインディングに渡されているため、if 条件が失敗しています。次のように使用する必要があります。

   <div data-bind="dialogFor: val"></div>

jquery uiダイアログの状態がobservableによって制御されている実際のを作成しました。

于 2013-03-11T19:39:14.170 に答える