A)について:
アプリの以下のルートを参照していると思います。このモデル関数は配列を返します。したがって、Emberは、UsersRouteをレンダリングするためにArrayControllerを使用する必要があることを認識しています。
App.UsersIndexRoute = Ember.Route.extend({
model: function() {
return App.User.find();
}
});
B)について:コードを更新しました-> http://jsbin.com/ozilam/15/edit
Emberの命名規則に一致するように、いくつかの名前(コントローラーとビュー)を更新する必要がありました。
Emberを使用すると、フォームを使用してそれらの値を手動で読み取る必要はありません。代わりに、ルートを入力するときに新しいレコードを作成します。
App.UsersNewRoute = Ember.Route.extend({
setupController : function(controller){
controller.set("content", App.User.createRecord({}));
}
});
ビュー内では、レコードのプロパティをバインドしています。ご覧のとおり、アクションヘルパーを使用してボタンも更新しました。
<script type="text/x-handlebars" data-template-name="users/new">
<div class="row">
<div class="six columns">
<h3>New User Information</h3>
<form>
<label>First Name</label>
{{view Ember.TextField valueBinding='name_first'}}<br />
<label>Last Name</label>
{{view Ember.TextField valueBinding='name_last'}}<br />
<label>Email Address</label>
{{view Ember.TextField valueBinding='email_address'}}<br />
<label>SSN</label>
{{view Ember.TextField valueBinding='ssn'}}<br />
<button {{action create target="view"}} class="button">Create</button>
{{#linkTo users}}Cancel{{/linkTo}}
</form>
</div>
</div>
</script>
フォーム内のこれらの変更はコントローラーに自動的に伝播されるため、コントローラー内のオブジェクトにアクセスするだけで済みます。
App.UsersNewView = Ember.View.extend({
didInsertElement: function() {
this.$('input:first').focus();
},
create: function(){
console.log('view submitted');
var newUser = this.get("controller.content");
console.log(newUser.get("name_first"));
console.log(newUser.get("name_last"));
// HOW DO I PROCESS THIS FORM
}
});
注:これを書いているときに、データ変更タスクであるため、ビューではなくコントローラーでこのイベントを処理する方がおそらく良いと思います。