0

view Todo.EditTodoView以下に複製された TodoMVC の Ember.jsの行は、私を混乱させます。

{{#each filteredTodos itemController="todo"}}
    ...
    {{#if isEditing}}
        {{view Todos.EditTodoView todoBinding="this"}}
    ...

この jsbin で確認できるように、機能していません。ダブルクリックして todo を編集すると、現在のテキストが消えて入力が更新されません。

(この jsbin の例で詳細を参照)"this"があったので、それが TodoController であることは理解していますが、 の「todo」はどうですか?itemControllertodoBinding


ガイドには、次のようにして機能させるコードがあります。

{{view Todos.EditTodoView valueBinding="title"}}

valueまた、この行が this<input>titleプロパティを のこのインスタンスのプロパティにバインドすることも示していますTodoController


それで、何が起こっているのtodoBinding="this"ですか?古いコードですか?

4

1 に答える 1

1

あなたの混乱に光を当てるようにしましょう。

itemController (この jsbin の例で詳細を参照) があったので、"this" が TodoController であることは理解していますが、todoBinding の "todo" はどうですか?

thisがdefined に設定されていると仮定するのは正しいですitemController TodoController。しかし、実際には、このではwithのプロパティにアクセスしようとしているため、行todoBinding="this"が読み取られるはずです。controllerBinding="this"controllerEditTodoViewthis.get('controller').acceptChanges()

したがって、2 つのオプションがあります。to のコードを変更EditTodoViewするか、または でプロパティにthis.get('todo').acceptChanges()バインドしてテンプレートを変更できます。controllercontrollerBinding="this"

ここでの穴の混乱は、 with で正しい名前にアクセスする限り、好きなようにinを呼び出すことtodoBinding="this"ができることです。todotodoBindingfooBinding="this"EditTodoViewthis.get('foo').acceptChanges()

このjsbinで確認できるように、機能していません。ダブルクリックして todo を編集すると、現在のテキストが消えて入力が更新されません。

あなたのjsbinにも、私が追加した todo のタイトルへのバインディングが欠けていました。これが todo が更新されない理由でした。ここで作業中のjsbinを参照してください。

これが今より理にかなっていることを願っています。

于 2013-06-08T18:49:55.757 に答える