Javascript 使用Multitpage cms应用程序的Knockout.js和Sammy.js
我正在使用Knockout.js和Sammy.js编写CMS。最初的CMS是使用PHP和CodeIgniter构建的 例如,我的CMS有一个用户部分和一个课程部分 最初,每个部分都有自己的页面用于添加/编辑/删除数据。我想做的基本上是为每个部分创建单页应用程序。因此,用户部分将是一个单页应用程序,允许您列出/添加/编辑/删除用户 我的问题是,当我想点击一个链接转到课程部分时,Sammy试图在尚未设置的页面上运行。有些页面可能不需要Sammy,因此我现在正试图找出如何禁用它,同时,我希望在CMS中的每个页面上使用相同的组合javascript文件 在我的应用程序中,如果有一个UserViewModel,它使用带Sammy函数的Knockout JSJavascript 使用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中
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();