Javascript 使用Multitpage cms应用程序的Knockout.js和Sammy.js

Javascript 使用Multitpage cms应用程序的Knockout.js和Sammy.js,javascript,php,codeigniter,knockout.js,sammy.js,Javascript,Php,Codeigniter,Knockout.js,Sammy.js,我正在使用Knockout.js和Sammy.js编写CMS。最初的CMS是使用PHP和CodeIgniter构建的 例如,我的CMS有一个用户部分和一个课程部分 最初,每个部分都有自己的页面用于添加/编辑/删除数据。我想做的基本上是为每个部分创建单页应用程序。因此,用户部分将是一个单页应用程序,允许您列出/添加/编辑/删除用户 我的问题是,当我想点击一个链接转到课程部分时,Sammy试图在尚未设置的页面上运行。有些页面可能不需要Sammy,因此我现在正试图找出如何禁用它,同时,我希望在CMS中

我正在使用Knockout.js和Sammy.js编写CMS。最初的CMS是使用PHP和CodeIgniter构建的

例如,我的CMS有一个用户部分和一个课程部分

最初,每个部分都有自己的页面用于添加/编辑/删除数据。我想做的基本上是为每个部分创建单页应用程序。因此,用户部分将是一个单页应用程序,允许您列出/添加/编辑/删除用户

我的问题是,当我想点击一个链接转到课程部分时,Sammy试图在尚未设置的页面上运行。有些页面可能不需要Sammy,因此我现在正试图找出如何禁用它,同时,我希望在CMS中的每个页面上使用相同的组合javascript文件

在我的应用程序中,如果有一个UserViewModel,它使用带Sammy函数的Knockout JS

UserViewModel() {
    // Data
    var self = this;

    self.newUser = ko.observable();
    self.userData = ko.observable();
    self.userList = ko.observableArray([]);
    self.successMessage = ko.observable();
    self.errorMessage = ko.observable();

    // Behaviors
    self.goToList = function() { location.hash = '#/'; };
    self.goToAdd = function() { location.hash = 'add/'; };
    self.goToEdit = function(user) { location.hash = 'edit/' + user.id; };
    self.goToDelete = function(user) { location.hash = 'delete/' + user.id; };

    self.addUser = function() {
        $.ajax("user/add", {
            type: "post",
            data: {
                user: self.newUser,
            },
            contentType: "application/json",
            success: function(result) {
                if (result.success) {
                    self.goToList();
                    self.successMessage(result.success);
                } else {
                    self.errorMessage(result.error);
                }
            }
        });
    };

    // Client-side routes
    Sammy(function() {          
        this.get('', function() {
            // What can I do here to ignore certain paths and just have them work like a normal link?
        });
        this.get('/admin/user#/', function() {
            self.userData(null);
            self.newUser(null);

            $.getJSON("user/getList", function(data) {
                var users = $.map(data, function(users) {
                    return new User(users);
                });
                self.userList(users);
            });
        });

        this.get('/admin/user#add/', function() {
            self.userList.removeAll();
            self.newUser(new User(''));
        });

        this.get('/admin/user#edit/:id', function() {
            self.userList.removeAll();
            self.newUser(null);
            $.getJSON("/admin/user/getEdit/" + this.params.id, function(allData) {
                var mappedSession = $.map(allData, function(item) {
                    return new Session(item);
                });
                self.sessionData(mappedSession[0]);
            });
        });

        this.get('/admin/user#delete/:id', function() {
            self.sessionList.removeAll();
            // TODO: Setup delete function
        });

        this.get('/admin/user', function() { this.app.runRoute('get', '/admin/user#/'); });
    }).run();
}
ko.applyBindings(new UserViewModel(), document.getElementById('user'));

如果我没弄错,您可以将Sammy初始化分配给某个视图模型的变量,如下所示:

self.sammy = Sammy(function()...); // NOTE: don't run it yet!
然后在绑定应用程序上:

var vm = new UserViewModel();
ko.applyBindings(vm, document.getElementById('user'));
vm.sammy.run();