Javascript 路由组件
我正在考虑构建一个敲除路由引擎,它根据url参数按需加载敲除“组件”,而不是像99%的示例中那样匹配预定义的路由值。 我之所以需要它,是因为我将根据条件拥有不同数量的视图和组件 对于组件,任务很简单,我只需遵循一些示例,下面的工作对我来说很好:Javascript 路由组件,javascript,knockout.js,url-routing,Javascript,Knockout.js,Url Routing,我正在考虑构建一个敲除路由引擎,它根据url参数按需加载敲除“组件”,而不是像99%的示例中那样匹配预定义的路由值。 我之所以需要它,是因为我将根据条件拥有不同数量的视图和组件 对于组件,任务很简单,我只需遵循一些示例,下面的工作对我来说很好: ko.components.loaders.push({ getConfig: function(name, callback) { var componentPieces, componentName,
ko.components.loaders.push({
getConfig: function(name, callback) {
var componentPieces,
componentName,
componentNamespace
if( name && name.indexOf('-') >= 1){
componentPieces = name.split('-');
componentName = componentPieces[1];
componentNamespace = componentPieces[0];
callback({
viewModel: {
require: "components/" + componentNamespace + "/" + componentName + "ViewModel"
},
template: {
require: "text!components/" + componentNamespace + "/" + componentName + ".tmpl.html"
}
})
}else{
callback(null);
}
},
//use the default loaders functionality for loading
loadComponent: ko.components.defaultLoader.loadComponent
});
到目前为止还不错,但我在路由引擎方面遇到了困难,我正在寻找解决方案。
目前看来,这一点很有希望,但我感觉不到
define(["knockout", "crossroads", "hasher"], function(ko, crossroads, hasher) {
var routerConfig = {
defaultParams: { page: 'home', action: 'view' }
};
function Router(config) {
var self = this;
var currentRoute = self.currentRoute = ko.observable({});
crossroads.addRoute(':page:/:action:', function(requestParams) {
var routeParams = $.extend(config.defaultParams, requestParams);
self.currentRoute(routeParams);
});
crossroads.bypassed.add(function(){
self.error(404);
});
self.error = function(code){
self.currentRoute({ page: 'error', code: code });
};
startCrossroads();
}
function startCrossroads() {
function parseHash(newHash, oldHash) { crossroads.parse(newHash); }
crossroads.normalizeFn = crossroads.NORM_AS_OBJECT;
// crossroads.shouldTypecast = true;
hasher.initialized.add(parseHash);
hasher.changed.add(parseHash);
hasher.init();
}
return new Router(routerConfig);
});
任何有用的资源和IDE都将不胜感激。请查看我的博客帖子 它有一个主id供viewmodel加载
#MyMainModel
然后,它还使用散列后的查询来侦听子路由
#MyMainModel?id=5
我真的不能说这是否是一个100%的解决方案,但也许它可以给你一些建议?看看这个漂亮的。它描述了Knockout+SammyJs应用程序,它可能非常适合您的需要。我玩了一段时间,但没有得到任何我喜欢的东西。请查看此代码,并在第一次尝试时编辑您的问题。然后,您将获得更多有用的答案,因为人们将有一个起点:这是对本演示的修改,您应该观看: