0

ブラウザの戻るボタンと emberjs に関しては、望ましくない動作が見られます。ユーザーが戻るボタンをクリックすると、レンダリングされたハンドルバー テンプレートがページに 2 回表示されます。

履歴が十分に長い場合、それは数回でも「機能」し、ページがどんどん長くなります。誰かがその問題をすでに見た(そして解決した)?

私のアプリケーションは現在、Pre4 の新しいルーター API に移動したことを除いて、 http: //trek.github.com/ で Trek によって示されているものとまったく同じです。

バージョン

  • emberjs 1.0 pre4
  • ハンドルバー 1.0 rc1
4

1 に答える 1

1

私自身の質問へのフォローアップ。私のコードには 2 つの問題があります。そのうちの 1 つを追跡し、誰かが同様の問題を抱えている場合に備えて、ここで解決策を共有します。

次のようなモデル定義がありました

App.Member.reopenClass({
  allMembers: [],
  findAll: function(){
    $.ajax({
      url: 'https://api.company.com/members',
      dataType: 'json',
      context: this,
      success: function(response){
        response.data.forEach(function(member){
          this.allMembers.addObject(App.Member.create(member))
        }, this)
      }
    })
    return this.allMembers;
  }
});

allMembers: []、すべてのメンバーを保持する参照でした。前後に移動すると、 のメンバーがバックエンドから再ロードされ、 に再度保存されallMembersます。

これを解決するには、で定義するだけallMembersですfindAll

App.Member.reopenClass({
  findAll: function(){
    var allMembers = [];
    $.ajax({
      url: 'https://api.company.com/members',
      dataType: 'json',
      context: allMembers,
      success: function(response){
        response.data.forEach(function(member){
          this.addObject(App.Member.create(member))
        }, this)
      }
    })
    return allMembers;
  }
});

おそらくルートを組み合わせた方法に関連する 2 つ目の問題があります。解決策がわかり次第、投稿します。

更新、2013-01-22

2 つ目の問題も発見され、emberJS + 戻るボタンが完全に機能するようになりました。繰り返しますが、誰かがつまずいた場合に備えて、問題が何であったかを簡単に要約したいと思います。

ルーティング定義は次のようになります。

App.Router.map(function() { 
  this.resource("areas", { path: "/areas" });   
  this.resource("area",  { path: "/areas/:refId" }, function() {
    this.route("new",    { path: "/areas/new" });   
});

さらに、'new' と 'area' はまったく同じビューとコントローラーを使用していました。したがって、問題は親ルート「area」とそのサブルート「new」の間でした。すべてを組み合わせて、コントローラー内で魔法をかけてどちらのケースかを区別しようとする試みは、お勧めできません...

したがって、解決策は次のとおりです。

  • mixin を使用してコードの重複を回避します (「new」と「area」の両方で Google Geocoder のものを使用します)
  • 以下に示すように、素敵でシンプルなルーティングを作成します。

そしてコードは

App.Router.map(function() { 
  this.route("areas",   { path: "/areas" });
  this.route("area",    { path: "/areas/:refId" });
  this.route("newarea", { path: "/area/new"});
});

それでおしまい。楽しんだりコメントしたり。専門家からの意見を得ることが常にうれしい

于 2013-01-21T23:14:50.187 に答える