2

削除したエンバールートがあります

App.MyRoute = Ember.Route.extend({
    model: function(params){
        console.log("model function executing");
        Ember.Object.create()
    },
    setupController: function(controller){
        console.log("setupController function executed");
    }
});

MyRoute に切り替えると、setupController が実行されますが、モデルを設定する関数は実行されません。モデルは、タグmsgで渡されたオブジェクトになります。 {{link myRoute msg}}

そのルートに切り替えるときに、ロード/計算する必要があるモデルの部分があります。これを行うには、モデルを正常に更新できるか、setupController 関数内からリンクで渡されたパラメーターにアクセスできる必要があります。これを達成するための最良の方法に関する提案はありますか?

編集

これをハッシュ化するために、この動作を生成する完全な最小限の例を作成しました。

私のhtmlは:

<html>
  <head>
    <title> This is my Page! </title> 

    <script src="js/libs/jquery-1.8.2.js"></script>
    <script src="js/libs/handlebars-1.0.rc.1.js"></script>
    <script src="js/libs/ember.js"></script>
    <script src="js/app.js"></script>
  </head>

  <body>
    <script type="text/x-handlebars">
      {{#linkTo example App.thing}}<p> go </p>{{/linkTo}}
      <div>
        {{outlet}}
      </div>
    </script>

    <script type="text/x-handlebars" data-template-name="index">
      <p> Initial Text </p>
    </script>

    <script type="text/x-handlebars" data-template-name="example">
      <p> After change </p>
    </script>
  </body>
</html>

アプリコードで:

var App = Ember.Application.create();

App.Router.map(function() {
    this.resource("example", {path: "/example/:id"});
});

App.thing = Ember.Object.create({
    id:10,
});

App.ExampleRoute = Ember.Route.extend({
    model: function(params){
        console.log("in model function");
        return new Ember.Object.create();
    },
    setupController: function(controller){
        console.log("in setupController");
    }
});

サンプル ルートへのリンクをクリックすると、「in setupController」は出力されますが、「in model function」は出力されません。

4

2 に答える 2

6

linkTotransitionTo裏で使っています。を使用するときはいつでもtransitionTo、実際にはコンテキスト/モデルを直接提供するためmodel、ルート上のメソッドは呼び出されません。上記の例では、{{#linkTo example App.thing}}. コンテキストが であることはすでにわかっているので、メソッドApp.thingをトリガーする理由はありません。モデルが何であるかがわからない場合にmodelのみ、ルートを呼び出します。modelこれが主に発生するのは、URL の変更による入力時です。

于 2013-01-29T20:41:37.897 に答える
0

私にとってはうまくいくように見えますが、うまくいかない理由はまったくありません: http://jsfiddle.net/SXTME/

EMBER 1.0.0-PRE.3 ではなく、EMBER 1.0.0-PRE.4 を使用していますか?

App.MyRoute = Ember.Route.extend({
    model: function(params){
        console.log("model function executing");
        Ember.Object.create()
    },
    setupController: function(controller){
        console.log("setupController function executed");
    }
});
于 2013-01-29T19:41:17.673 に答える