1

ボタンをクリックすると、次のようにビューでクリックをキャッチします。

events:{
   'click .parameter-input a': 'saveParameter'
},

saveParameter 関数で私はこれを行います:

saveParameter: function(ev) {
        parameter.value = $('.parameter-input .param').val();
        console.log(parameter.value);
        router.navigate("#/page2/" + parameter.value, {trigger:true});
        return false;           
    }

そして私のルートは次のように定義されています:

var Router = Backbone.Router.extend({
    routes: {
      "": "home",
      "page2/*parameter": "UIpage2",
    }
});

var page1 = new Page1();
var page2 = new Page2();

var router = new Router;
router.on('route:home', function() {
    page1.render();
    console.log("page1 render");
})
router.on('route:UIpage2', function(parameter){
    page2.render();
    console.log("page2 render " + parameter.value);
})

Page2 は次のように定義されます。

    var Page2 = Backbone.View.extend({
    el:'.page',
    render: function() {
        var template = _.template($('#page2').html(), {parameter: parameter});
        this.$el.html(template);
    }
});

.page に移動したときに page2 render で .page を再度強制的に更新するにはどうすればよいですか? ページ 2 のレンダリングが呼び出されることはありません。

編集: parameter は、入力ボックスから取得された文字列値であり、mydomain.com/#/page2/parameter のような URL および page2 の div に表示される必要があります。

4

2 に答える 2

1

ハッシュはルートにあってはならないので、置き換えてください

router.navigate("#/page2/" + parameter.value, {trigger:true});

router.navigate("page2/" + parameter.value, {trigger:true});

また、バックボーンの履歴を で初期化したことを確認してくださいBackbone.history.start()

これは最小限の作業例です。

var Router = Backbone.Router.extend({
  routes: {
    "": "index",
    "bar": "bar",
    "page2/*parameter": "foo"
  },

  index: function() {
    console.log("on page index");
  },

  bar: function() {
    console.log("on page bar");
  },

  foo: function(data) {
    console.log("on page foo with data: " + data);
  }
});


var router = new Router();
console.log("router created");
Backbone.history.start();
console.log("initializing backbone history");
router.navigate("bar", {trigger: true});
router.navigate("page2/foobar", {trigger: true});
于 2013-09-14T14:09:25.073 に答える