0

これが私のフィドルです:

http://jsfiddle.net/PTSkR/8/

テキストをクリックすると、サイドを編集可能にしようとしています。私はノックアウトサイトからこの例に従っています:

見る:

<p>
    Name: 
    <b data-bind="visible: !editing(), text: name, click: edit">&nbsp;</b>
    <input data-bind="visible: editing, value: name, hasfocus: editing" />
</p>
<p><em>Click the name to edit it; click elsewhere to apply changes.</em></p>

脚本:

function PersonViewModel(name) {
    // Data
    this.name = ko.observable(name);
    this.editing = ko.observable(false);

    // Behaviors
    this.edit = function() { this.editing(true) }
}

ko.applyBindings(new PersonViewModel("Bert Bertington"));

http://knockoutjs.com/documentation/hasfocus-binding.html

「サイド」のテキストをクリックすると、「編集」機能が表示されますが、divの表示は変わりません。これはスコーピングの問題だと思いますが、トラブルシューティングの方法がわかりません。

4

1 に答える 1

1

問題は、hasfocusバインディングもeditableオブザーバブルに関連付けられていることです。このバインディングを削除すると、可視性が正常に更新されます。これは、Knockoutがフォーカスを設定しようとして失敗し、editablefalseに戻ったことを意味していると思います。

おそらく、そのバインディングを使用するblur代わりに、代わりにイベントハンドラーを入力にアタッチすることができます。このハンドラーではeditable、falseに設定します。

于 2013-03-24T22:14:54.197 に答える