无法使控制器属性和绑定在Ember中正常工作 - 拉出我的头发

时间:2013-05-28 14:30:23

标签: javascript data-binding ember.js

早上好,

感谢您提供的任何帮助。我目前正在沮丧地拔头发。我真的想要了解Ember,但我必须遗漏一些东西。

我想做的就是以下几点:

  1. 用户访问/rooms路线,应用App.Room.find()电话
  2. 用户访问/rooms/1路线,应用设置了selectedRoom上的RoomController媒体资源。
  3. 使用selectedRoom模板中的rooms属性来指明当前选择的是哪个会议室。
  4. 使用每个isSelected中的selectedRoom属性创建RoomController计算属性,以调整该特定房间的显示
  5. 这应该很简单,但它对我不起作用。

    路线

    App.RoomsRoute = Ember.Route.extend
      setupController: ->
        @controllerFor('application').set('currentRoute', 'rooms') 
      model: ->
        App.Room.find()
    
    App.RoomRoute = Ember.Route.extend
      setupController: (model) ->
        @controllerFor('application').set('currentRoute', 'rooms') 
        @controllerFor('rooms').set('selectedRoom', model) 
      model: ->
        App.Room.find(params.room_id)
    

    控制器

    (这应该设置一个默认值,这样当用户只在/rooms时,就会有一个要写入模板的字符串)

    App.RoomsController = Ember.ArrayController.extend
      selectedRoom: 'default'
    
    App.RoomController = Ember.ObjectController.extend
      needs: ['rooms']
      isSelected: ( ->
        selectedRoom = 'controllers.rooms.selectedRoom'
        if selectedRoom.id == @get('id')
          return true
        else
          return false
      ).property('controllers.rooms.selectedRoom')
    

    模板

    <p>My selected room: {{ selectedRoom.room_id }}</p>
    
    {{#each room in controller}}
      {{#linkTo 'rooms.room' room}} Room {{ room.room_id }} {{/linkTo}}
    {{/each}}
    

    # This template is a contrived simplification of what I want to do... but essentially I just want to be able to access the `isSelected` property of the `RoomController`
    <div {{ bindAttr class='isSelected' }}>
      <p>Room {{ room.room_name }}</p>
    </div>
    

1 个答案:

答案 0 :(得分:1)

当我在旧版本的Ember(v1.0.0-pre.4)上运行你的代码(填充了一些空白)时,它似乎按照您的需要工作,当您点击它时所选房间会突出显示

当我尝试使用最新版本(1.0.0-rc.4)时,它无法正常工作,所以这告诉我这可能是Ember的一个突破性变化。

根据this answermodelsetupController挂钩会在不同情况下被调用。

为了让您的代码有效,我必须在controller.set("model", model);中添加setupController

App.RoomsRoute = Ember.Route.extend({
  setupController: function(controller, model) {
    this.controllerFor('application').set('currentRoute', 'rooms');
    // Load the model property here because the model hook isn't 
    // called in this case
    controller.set("model", model);
  },
  model: function() {
    return App.Room.find();
  }
});`

不是Ember专家,也不确定这是否与您遇到的问题相同,但这对我有用。我尝试的完整工作代码在这里:https://gist.github.com/jasonschock/5667656#file-app-js-L15