0

早上好,

我将不胜感激您能提供的任何帮助。我现在正沮丧地拔头发。我真的很想掌握 Ember 的窍门,但我一定错过了一些东西。

我想做的就是以下几点:

  1. 用户访问/rooms路由,appApp.Room.find()调用
  2. 用户访问/rooms/1路由,应用selectedRoomRoomController.
  3. 使用模板中的selectedRoom属性rooms来指示当前选择了哪个房间。
  4. 使用每个属性创建一个isSelected计算属性以调整该特定房间的显示selectedRoomRoomController

这应该很容易,但它不适合我。

路线

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>
4

1 回答 1

1

当我在旧版本的 Ember (v1.0.0-pre.4) 上运行您的代码(填充了一些空白)时,它似乎可以按您的意愿工作,当您单击选定的房间时,它会突出显示。

当我使用最新版本 (1.0.0-rc.4) 尝试它时,它不起作用,所以这告诉我这可能是 Ember 的一个重大变化。

根据这个答案modelsetupController钩子在不同的情况下被调用。

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

于 2013-05-29T02:55:05.730 回答