我刚从Ember Data切换到Ember Model。我复制并粘贴网址时遇到问题。嵌套资源的工作方式应该如此,但嵌套路由不会。
我的应用程序路由我有一个setupController加载到控制器中以跨多个url使用。
Msmapp.ApplicationRoute = Ember.Route.extend({
setupController: function(controller, model) {
this._super(controller, model); //Added per RC.4
this.controllerFor('district_students').set('content', Msmapp.Student.findQuery({ district_load: true }));
}
});
这些是我定义的路线
this.resource('classrooms', function() {
this.resource('classroom', {path: ':classroom_id'}, function() {
this.route('new_student');
});
this.route('new');
});
所以我的网址看起来像这样
/classrooms/1
/classrooms/new
/classrooms/1/new_student
在应用程序中导航时一切正常,但如果我复制并粘贴URL,则只有资源类型路由正确加载
/classrooms/1 //This loads just fine when copy pasted
/classrooms/new //These do not.
/classrooms/1/new_student
在两个失败的案例中。看起来应用程序路径中的controllerFor没有被触发。
// Does not get set when copy paste to a this.route type route.
this.controllerFor('district_students').set('content', Msmapp.Student.findQuery({ district_load: true }));
我认为没有被调用是导致页面无法正确加载的原因。我在控制台中没有任何错误,我也可以在网络中看到没有制作区学生的电话。
我还注意到,在LOG_TRANSITIONS:true打开的情况下,我在进入两条失败路线时都没有记录任何内容。
的 的 * UPDATE ***
所以我想出了一些事情。
所以现在当我需要从表单创建一个新对象时,这样做
<form {{action createClassroom on="submit"}} class="form-horizontal">
<div class="field">
<label>Classroom Name</label>
{{input value=classroom_name type='text' placeholder="Classroom Name"}}
</div>
<div class="field">
<label>Classroom Grade</label>
{{input value=classroom_grade type='text' placeholder="Classroom Grade"}}
</div>
<div class="field action">
{{submitButton "Setup Classroom"}}
</div>
</form>
输入助手有一个值attr,它有一个属性名称(NOT IN QUOTES),可以在控制器的createClassroom方法中使用(常规Ember.Controller)如果我将它切换到ObjectController是正确的工作,我假设它寻找具有该属性的模型。
所以现在在我的控制器中我可以使用getProperties()
从表单中获取值Msmapp.ClassroomsNewController = Ember.Controller.extend({
needs: ['classrooms'],
createClassroom: function() {
var self = this;
$.ajax({
url: '/classrooms',
method: 'POST',
dataType: 'json',
data: self.getProperties('classroom_name', 'classroom_grade'),
}).then(function(newClassroomData) {
var newClassroom = Msmapp.Classroom.create(newClassroomData);
// Add newClassroom to existing classrooms array.
self.transitionToRoute('classroom', newClassroom);
});
}
});
反正。我希望这有助于某人。