質問

バックボーンに問題があります。フォームビューを2回使用すると、フォーム送信イベントが2回起動されます。それぞれの新しいビューがボディに追加され、前のビューが削除されます。そのためには、app.jsファイルでこのコードを使用します。

$(document).on("mobileinit", function () {
    $.mobile.linkBindingEnabled = false;
    $.mobile.hashListeningEnabled = false;

    $(document).on('pagehide', 'div[data-role="page"]', function (event, ui) {
        $(event.currentTarget).remove();
    });
})

router.js

define([
  'jquery',
  'backbone',
  'views/projects/ProjectsView',
  'views/projects/AddProjectView'
], function($, Backbone, ProjectsView, AddProjectView) {

  return Backbone.Router.extend({

    routes: {
      'addProject': 'addProject',
      'editProject/:projectId': 'editProject', 
      '*actions': 'showProjects' // Default
    },

    addProject: function() {
      new AddProjectView().render();
    },
    editProject: function(projectId) {
      require([
        "views/projects/EditProjectView", 
        "collections/ProjectsCollection", 
        "models/ProjectModel"
      ], function (EditProjectView, ProjectsCollection, ProjectModel) {
        var projectsCollection = new ProjectsCollection();
        projectsCollection.fetch();

        var project = projectsCollection.get(projectId);
        if (project) {
          var view = new EditProjectView({model: project, projectsCollection: projectsCollection});
          view.render();
        }
      });
    },


    showProjects: function() {
      new ProjectsView().navigate();      
    }

  });
});

コードを自分のウェブサイトのディレクトリにアップロードしました。 http://rickdoorakkers.nl/np2次の手順を実行すると、問題がわかります。

  1. プロジェクトを追加します
  2. 別の名前の2番目のプロジェクトを追加します
  3. それをクリックしてプロジェクトを開き、値を変更して保存します
  4. ご覧のとおり、プロジェクトを追加するイベントが開始され、変更される代わりにプロジェクトが追加されています。
  5. この同じ問題は、2つのプロジェクトを互いに変更しようとするときにも発生します。最初のプロジェクトは編集されます。

私が間違っていることを教えてくれる人はいますか?

ありがとう!

役に立ちましたか?

解決

Rido、あなたのコードは、バックボーンの通常の慣習をフォローしていないものをいくつか混合している方法のために、私のために読むのが本当に難しいです。

あなたの特定の問題については、編集ビューとボディへの新しいビュー(el:body)の両方をバインドし、両方ともイベントの送信に応答し、あなたがビューを明確に掃除することはないので、私は 考える プロジェクトを追加して編集するたびに、追加ビューはまだメモリにあり、編集する代わりに、まだ送信イベントにバインドされ、新しい名前で新しいプロジェクトに応答します。

追加後に停止するためにコールを追加することにより、汚れた方法で修正するのは簡単ですが、本当の問題は、あなたが身体に結合していることであり、ミキシングがバックボーンルーターと手動のハッシュコントロール +フェッチングなどの他の奇妙なパターンをトーザルすることです5行ごとにコレクション(アプリの開始時に1つだけ作成して常に使用できます!ここではローカルストレージです。 ()コレクションをリセットし、完全なリロードを行います!)。 JQuery Mobileを気にせずにこれを書き直そうとすることをお勧めします。BackBone.Router + 1つのコレクション +ボディにバインディングするのではなく、その代わりにビューを作成してボディ /削除に追加することを試みることをお勧めします。あなたが終わったとき?バグは奇妙ではなく、追跡しやすくなることがわかります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top