Javascript web应用的最佳解决方案
Best solution for Javascript web app
我目前正在开发一个类似于Google Reader的web应用程序(至少在处理什么样的信息方面)。我已经用Javascript和jQuery构建了一个基本的原型,但我很快就发现它变得非常混乱,非常快。
所以今天我一直在看Javascript应用程序有哪些MVC框架。这是一种我熟悉的开发体系结构,它非常适合我正在尝试做的事情。我发现的一些替代方案是SprouteCore, Backbone.js和Knockout.js(不是MVC,但足够接近)。它们各有利弊,但我不确定哪一个适合我。
我需要的是一个框架,它允许我在模型改变时自动更新视图(因此,如果我在视图中显示数组中的所有项目,然后我向数组添加另一个项目,视图中的列表应该更新自己),并且允许我干净地将Javascript与HTML分开(至少尽可能多)。如果它已经有一个很好的接口,可以通过AJAX调用从RESTful API获取模型的信息,那么就会获得额外的分数——但这并不是严格要求的。
有什么想法我应该怎么做?我对Javascript不是很有经验,但我也不是完全没有经验。我已经考虑过将Backbone.js与icanhazs .js+Moustache.js结合起来,但我不完全确定这是否解决了我希望视图在模型发生变化时"自我更新"的问题。
您正在描述MVVM模式的属性。我已经成功地在几个解决方案中使用Knockout.js来实现类似于您想要做的事情。此外,Knockout为Ajax调用提供了一些方便的函数,但如果需要完全控制,您总是可以使用jQuery,或者两者都使用。
http://batmanjs.org/非常新,我认为它在更新视图方面完全符合您的需要。这是通过观察者模式完成的。他们有一些非常棒的概念,分离html和javascript,删除了很多通常需要做的事件绑定。值得一看。
Mulberry是另一个即将发布的框架,它看起来很有前途http://mulberry.toura.com
Ext-JS, http://docs.sencha.com/ext-js/4-0/,有很多数据驱动的小部件,如树,网格和数据视图
例如,一个网格的http://docs.sencha.com/ext-js/4-0/#!/api/Ext.grid.Panel数据来自一个存储http://docs.sencha.com/ext-js/4-0/#!/api/Ext.data.Store,当您向存储添加记录时,网格会自动更新其视图
Ext.define('ImageModel', {
extend: 'Ext.data.Model',
fields: ['name', 'url', {name:'size', type: 'float'}, {name:'lastmod', type:'date', dateFormat:'timestamp'}]
});
var store = Ext.create('Ext.data.JsonStore', {
model: 'ImageModel',
proxy: {
type: 'ajax',
url: 'get-images.php',
reader: {
type: 'json',
root: 'images'
}
}
});
// This will fetch JSON from the URL above and the grid updates once the load is completed
store.load();
// This is loading data inline if you don't want to automatically hook up to a URL
// Again, the view updates automatically when you update the underlying store
store.loadRecords({
images: [
{name: 'Anything', url: 'http://www.img.com/idkdk', size: 54545, lastmod: '2011-08-01T02:12:36'}
]
});
除此之外,Ext还在客户端实现了MVC。http://docs.sencha.com/ext-js/4-0/!/指导/application_architecture
Ext存储还可以使用CRUD,并在您从存储中添加和删除记录时自动发送请求CREATE, READ, EDIT, DELETE命令。
- 可以转换显示属性吗?如果没有,什么'这是最好的解决方案
- iPad虚拟键盘-哪一个-javasctript解决方案
- AJAX HTTP基本身份验证解决方案
- 在chrome web商店中打开时,是否有允许执行内容/后台脚本的解决方案
- 提交表单后的最佳解决方案
- 在数组中查找重复项的最佳解决方案
- 将复杂内容(想想整个网页树)从一个 Web 应用程序提供给另一个网站的最佳可重用解决方案是什么?
- 以编程方式确定是否可以在对象上运行 for 循环的最佳解决方案
- 在 Javascript 中模拟“IN”运算符以简化冗余逻辑 OR 的最佳解决方案是什么?
- WebSocket:后端的最佳解决方案
- 使用jQuery在iPhone等移动设备上禁用悬停的最佳和完美的解决方案是什么
- 寻找实现AJAX TreeGrid的最佳解决方案
- 单元测试Mootools代码的最佳解决方案
- 使用javascript的web界面的最佳解决方案是什么?
- 检查数据集是否被更改(添加/编辑,删除记录)的最佳解决方案是什么?
- 制作多语言网站、复制粘贴页面的最佳解决方案是什么?脚本
- Javascript web应用的最佳解决方案
- IE7响应式设计的最佳解决方案/框架
- 调用angular.isDate()的最佳解决方案
- 为视力不佳的人实现网站版本的最佳解决方案