是否有任何kn​​ockoutjs页面/路由框架?

max*_*dbe 40 javascript-framework knockout.js

来自asp.net MVC 3.在MVC4中,他们介绍了WebAPI.能够在javascript中完成所有视图/路由代码并且只依赖于MVC for API会很高兴.非常酷,webapi可以独立于IIS运行!

话虽如此:

是否有任何页面框架可以利用KnockoutJS,它类似于我的模型如下:

Framework.RegisterRoutes(..,mainViewModel);//sets the CurrentViewModel?
Run Code Online (Sandbox Code Playgroud)

每个路由都是viewModel的单独文件,以及要注入主视图的视图

var mainviewModel= function(){
   var self = this;
   self.CurrentViewModel = ko.observable();
   ...
   return self;
}

<div id="mainPageContent" data-bind:'html:CurrentViewModel.Render'>
</div>
Run Code Online (Sandbox Code Playgroud)

我知道很多这可以通过self实现,但不知道如何实现寄存器路由/加载单独的文件

我觉得knockoutjs的主要优点是能够不干涉你编码js的方式(即只要交互对象可观察就构建一个对象/框架你想要的方式)

Jam*_*ger 45

Pager.js是专为与Knockout.js一起使用而构建的URL路由框架.确保您完成整个演示,以了解其全部功能和灵活性.恕我直言,它远远超过了PathJS和Sammy.

  • 我可以问为什么这些可用的路由框架都没有使用HTML5历史记录功能?一切都在使用hashbang#!当HistoryJS只回到谷歌搜索引擎优化目的时......我在这里错过了一些东西吗? - https://github.com/browserstate/history.js (5认同)
  • 看到寻呼机时我印象非常深刻.Sammy似乎总是选择的框架,但我真的很喜欢寻呼机适合淘汰的做事方式.好一个! (3认同)
  • 我在几个企业规模的项目中成功使用它 (3认同)
  • 据我从文档中了解,使用historyJS支持html5历史记录.它甚至有一个代码示例,展示了如何启用它.html5历史记录意味着Google网络抓取工具可以浏览您的网站,但不仅限于抓取工具流量. (2认同)
  • 历史API在Pager.js中得到了支持!去看看文档吧 (2认同)

Joh*_*apa 20

Sammy.js是一个优秀的轻量级路由JavaScript库.你可以做这样的事情来与Knockout一起使用时进行路由(来自教程网站或KnockoutJS):

$.sammy(function() {
    this.get('#:folder', function() {
        self.chosenFolderId(this.params.folder);
        self.chosenMailData(null);
        $.get("/mail", { folder: this.params.folder }, self.chosenFolderData);
    });

    this.get('#:folder/:mailId', function() {
        self.chosenFolderId(this.params.folder);
        self.chosenFolderData(null);
        $.get("/mail", { mailId: this.params.mailId }, self.chosenMailData);
    });

    this.get('', function() {
        this.app.runRoute('get', '#Inbox');
    });
}).run();  
Run Code Online (Sandbox Code Playgroud)

另一个选择是使用SproutCore,但它远远超过nav,所以除非你想要所有的SproutCore,否则我不推荐这条路线.还有很多其他的库,但到目前为止我喜欢Sammy.js,因为它的重量很轻.

  • @pnewhook - 是的,我同意.这就是DRY的用武之地.大部分代码都是针对每个"get"重复的,所以我创建了一个封装路由设置逻辑的函数.然后我传入一个包含每条路径信息的对象文字数组.使代码非常紧凑,并且可以跨项目完全重用. (3认同)

cas*_*ebb 8

我想通过ko-component-router向未来的Google员工/ SOers投入使用.

IMO API比Pager.js简洁得多,并且已经为KO明确设计,它内置了可观察路径和查询字符串参数等内容.

最重要的是,它是积极维护的,并将在可预见的未来中保持这种状态.

免责声明:我是这个软件包的开发者.