我有以下 Marionette 应用程序:http://slexy.org/view/s21ARG2QdP
我的问题是,当我选择树中的节点时,我收到“已选择”和“已路由”警报。
但是当我再次选择该节点时,我只看到“已选择”。
如果我转到相同的网址,我就无法进入 Controller 功能。
有人知道我错过了什么吗?
谢谢,亚历克斯 A。
最佳答案
您的代码是正确的。您的“问题”来自 Backbone.History.navigate(fragment, options)
的实现.
让我们研究一下:
navigate: function(fragment, options) {
if (!History.started) return false;
if (!options || options === true) options = {trigger: !!options};
// Normalize the fragment.
fragment = this.getFragment(fragment || '');
// Don't include a trailing slash on the root.
var root = this.root;
if (fragment === '' || fragment.charAt(0) === '?') {
root = root.slice(0, -1) || '/';
}
var url = root + fragment;
// Strip the hash and decode for matching.
fragment = decodeURI(fragment.replace(pathStripper, ''));
if (this.fragment === fragment) return;
this.fragment = fragment;
// Truncated
....
....
}
从这里你可以看到,当当前片段等于新片段时,Backbone.History.navigate()
函数将退出,因此它不会触发 Controller 的操作。
我认为这种方法是处理路由的正确方法,如果您需要对当前 View 进行某种“刷新”,您可以使用以下几种技术之一:
全页刷新。
手动调用 Controller 的操作。
关于javascript - Marionette 未导航到同一网址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27107761/