1

Ember 1.0.0 と Ember Data (ベータ版) の最新ビルドを使用していますが、動作していない動的セグメントを含むルートがあります。

以下のルートを定義しました。

PwdMgr.Router.map(function() {
 this.resource("passwords", function(){
  this.resource("password", {path: "/:password_id"}, function(){
    this.route("edit");
  });
 });
}

テンプレート passwords.index では、次のようなモデルのリストを表示します。

{{#each}}
            <tr>
                <td>{{id}}</td>
                <td>{{name}}</td>
                <td>{{client.name}}</td>
                <td>{{service.name}}</td>
                <td>{{localisation.name}}</td>
                <td>{{status.name}}</td>
                <td>{{login}}</td>
                <td>{{password}}</td>
                <td>
                    {{#link-to 'password.index' this}}<span class="glyphicon glyphicon-search"></span>{{/link-to}}
                    {{#link-to 'password.edit' this}}<span class="glyphicon glyphicon-pencil"></span>{{/link-to}}
                    <span class="glyphicon glyphicon-remove" {{action 'edit' password}}></span>
                </td>
            </tr>
        {{/each}}

私は 2 つのリンクを持っています。1 つはルート password.index に行き、もう 1 つはルート passwword.edit に行きます。動的セグメントのモデルを提供すると、ハンドルバーによって URL が正しく作成されます (/passwords/1 および /passwords/1/edit)。

私の問題は、URL /password/1 (または /password/1/edit) に到達すると、モデルが単一のオブジェクトではなく、オブジェクトの配列になることです。

ガイドで説明されているように、デフォルトのパターンを使用しているため、Route オブジェクトをセットアップしませんでした。しかし、デバッグ目的で、password.index ルートのルート オブジェクトを作成しました。外観は次のとおりです。

PwdMgr.PasswordIndexRoute = Ember.Route.extend({
model: function(params){
    console.log(params);
    return this.get('store').find('password',params.password_id);
},
setupController: function(controller, model){
    console.log(model);
}

});

そして、ここに私のコンソールログがあります:

Object {}                app.js (line 31)
<DS.RecordArray:ember435> { content=[3], store=<DS.Store:ember506>, isLoaded=true, more...}                     app.js (line 35)

空のオブジェクトは、オブジェクトの配列を取得する理由を説明していますが、params 変数が空のオブジェクトである理由はありますか?

どうもありがとう

[編集]

Router.map を次のように変更しました。

PwdMgr.Router.map(function() {
 this.resource("passwords", function(){
 this.route("detail", {path: "/:password_id"});
 this.route("edit", {path: "/:password_id/edit"});
 });
}):

また、「詳細」ルートと「編集」ルートの両方の動的セグメントは正常に機能します。問題は、動的セグメントがネストされたリソースにあるという事実にあると思います。これは、Emberjs ガイドの例がネストされたリソースの動的セグメントを使用しているため、奇妙です。

4

2 に答える 2

0

password/1 は実際のルートではないようです。passwords/1 を試して、パスのスラッシュを取り除きます。

PwdMgr.Router.map(function() {
  this.resource("passwords", function(){
   this.resource("password", {path: ":password_id"}, function(){
     this.route("edit");
   });
  });
 }

またはそれをに変更します

PwdMgr.Router.map(function() {
  this.resource("passwords", function(){});
  this.resource("password", {path: "password/:password_id"}, function(){
     this.route("edit");
   });
 }
于 2013-09-10T00:20:18.107 に答える
0

ダニエルのコメントのおかげで間違いを見つけました。

私のルートは次のように設定されていました(編集前):

passwords
 password
  password.detail
  password.edit
 password.index

ルート PwdMgr.PasswordsRoute を使用して、モデルとそれに対応するテンプレート パスワードをセットアップしていました。

問題は、私が passwords ルートにいて、password.detail ルートに直接行ったことです。model パラメーターを使用して、パスワードから password.detail (または password.edit) に移動する際に問題があったと思います。

とにかく、ルートを PwdMgr.PasswordsIndexRoute に変更し、対応するテンプレートを passwords/index に変更すると、すべてが期待どおりに進みました。モデルは動的セグメントを正しく通過しました。

私の間違いを指摘してくれたダニエルに感謝します。

于 2013-09-11T07:04:42.303 に答える