人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Spine.jsのTodoアプリを作るチュートリアルを見て勉強しているのですが、下記行の「this.item」がなぜ、モデルを表しているのかがわかりません。

◎Spine.jsのTodoアプリチュートリアル
http://spinejs.com/docs/example_tasks

◎該当行
this.replace($("#taskTemplate").tmpl(this.item));

下記行は、Taskモデルではなく、Tasksコントローラー内で記述されているので、thisはTasksコントローラーのインスタンスを表すことにはならないのでしょうか?

●質問者: 匿名質問者
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● 匿名回答1号

こんばんは。

this.item(@item)のthisは質問に書かれている通り、Tasksコントローラのインスタンスを表しています。

この時this.itemがなぜモデルを表すのかは、
Tasksコントローラが生成されるTaskAppコントローラaddOneメソッドを見ると意味が分かります。

 addOne: (task) =>
 view = new Tasks(item: task)
 @items.append(view.render().el)

ここで、Tasksコントローラをnewする際にitemというパラメータを引数で渡しています。

Spine.Controllerのコンストラクタでは、引数に渡されたパラメータ(arguments)を使ってインスタンスを初期化するため、itemプロパティで渡されたtaskモデルがTasksコントローラのプロパティとして定義されることになります。

以上が理由になります。ちなみに、

class Tasks extends Spine.Controller
 constructor: ->
 super
 @item.bind("update", @render)
 @item.bind("destroy", @remove)

上記のコンストラクタの中でも@itemを使ってbind定義ができるのも同じ理由です。


匿名質問者さんのコメント
とても丁寧なご回答ありがとうございます!実は公式ドキュメントを何度か繰り返し読み込んでいたら、自己解決してし まったのですが、こういった質問にもしっかりとした回答がつくのは、はてなってすごいなーと実感しました! ちなみに、自分がつまづいてた点は、addoneの引数にモデルのインスタンス(?)がなんで渡されてるかわからなかったところです。 コールバックでaddone呼び出してるときには、引数には何もいれてないし、なぜ、モデルにコントローラ内からアクセス出来るようになるんだろう?と。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ