1

次のような ArrayController があります。

DashboardController = Ember.ArrayController.extend
  content: []

  xFormatter: (x) ->
    d3.time.format("%m-%d") x

  init: ->
    console.log("dashboardController init")
    @_super()

    y = undefined
    currentDate = undefined
    i = 1

    while i < 30
      currentDate = new Date("12/" + i + "/2011")
      @content.pushObject
        x: currentDate
        y: (Math.random() * 100) / 10

      i++

アプリが初期化されると、コントローラーが作成され (コンソールに示されているように)、コンテンツが実行中に配列にプッシュされinitますcontentが、他の場所 (ビューなど) からアクセスしようとすると未定義になります。を試してから、の開始時にcontent: null実行しましたが、同じ結果が得られました。@set("content", [])init

contentEmber のガイドでは、ルートのメソッドにArrayController のプロパティを設定してsetupController、表現するモデルを指定するように指示されていますが、この「モデル」は実際には関数の結果であるため、どうすればよいかわかりません。initは作成されたインスタンスごとに実行されるため、各インスタンスはcontentを使用せずに入力されると思いましたsetupController

これを引っ張った例は、1.0.0-rc1 には適していない古いアプローチを使用していると思います。これを機能させるにはどうすればよいですか?

4

2 に答える 2

1

簡単な修正 (EmberJS 1.0.0rc-3 以降) は、モデルが既に存在する場合、コントローラー コンテンツへのルートでモデルを定義することです。Like So (コーヒーのスクリプトを許してください):

App.MyRoute = Em.Route.extend
  model: ->
    @get('controller.content') || App.My.find(query)

ただし、マスターに変更があったため、これが機能しなくなったため、行う必要があるかもしれません

App.MyRoute = Em.Route.extend
  model: ->
    controller = @controllerFor('my')
    controller.get('content') || App.My.find(query)
于 2013-04-25T18:02:46.593 に答える
0

わかりましたので、値を生成するコードをmodelルートのフックに移動し、フックを使用しsetupControllerてコントローラーの を設定するのがコツのようcontentです。これについて私が気に入らない唯一の点は、ルートへの遷移があるたびにデータが生成されることです (modelsetupControllerフックが毎回呼び出されるため)。一度計算してキャッシュしたいと思います。これを行う方法は、最初に新しいデータを作成するか、キャッシュされたデータを返すオブジェクトを作成し、modelフックでこのオブジェクトを呼び出すことだと思います。

于 2013-03-03T22:03:53.470 に答える