灰烬复制和粘贴网址无法正常工作

时间:2013-06-02 17:05:36

标签: ember.js

我刚从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 ***

所以我想出了一些事情。

  1. 如果我完全摆脱了我的“新”路线上的模型钩子,那么当复制粘贴时,URL会再次开心。
  2. 当使用使用表单创建“新”对象的路由时,我发现使用常规Ember.Controller与Ember.ObjectController更好。
  3. 所以现在当我需要从表单创建一个新对象时,这样做

            <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);
        });
      }
    
    });
    

    反正。我希望这有助于某人。

0 个答案:

没有答案