我正在将Backbone和Backbone.Marionette集成到现有的Web应用程序项目中.我们计划暂时保留项目中的所有现有功能,但我们将利用Backbone结构和Marionette主体的任何新功能.首要任务之一是确定HTML模板渲染库以及这些模板的数据绑定解决方案.以前,我们一直在使用JsRender和JsViews来满足我们所有的模板需求和数据绑定,但我们愿意为我们的新功能探索新的途径.所以基本上我一直在研究各种解决方案,现在需要一些建议或想法来选择什么.这是我到目前为止所看到的:
优点:似乎遵循Backbone的关注点分离的想法,这有助于保持模板非常"干净".
缺点:看起来您必须在视图中编写更多代码来定义绑定.此外,似乎缺乏进行条件渲染的能力,因此您必须始终渲染完整模板并切换某些元素的显示.
优点:在模板中处理更多数据绑定选项,而不会使其太乱.
缺点:此外,似乎缺乏条件渲染.
优点:通过属性处理各种数据绑定需求.
缺点:使用转换器轻松启动"弄脏"模板.必须添加另一个步骤来从Backbone模型创建Knockout视图模型.
优点:类似于Knockout的能力,但语法不同.处理条件渲染.
缺点:过去我们通过在模板中添加太多业务逻辑来弄脏我们的模板,但这可能是我们可以纠正的开发问题.需要创建将JsViews可观察性功能与Backbone模型事件联系起来的功能.其他库如StickIt和Knockback会自动处理这个问题.
我们还研究了Backbone.ModelBinder,它介于StickIt和Rivets之间.
任何人都可以分享他们做出的任何决定以及为什么他们选择一个插件/库而不是另一个?我也对其他建议持开放态度.谢谢.
data-binding template-engine backbone.js rivets.js marionette
我正在使用Javascript模块模式来尝试实现类似C#枚举的功能.我有两种方式,我目前正在考虑实现此功能,但我不明白一种方式与另一种方式的所有好处或优点.
这是实现1:
var MyApp = (function (app) {
// Private Variable
var enums = {
ActionStatus: {
New: 1,
Open: 2,
Closed: 3
}
};
// Public Method
app.getEnum = function (path) {
var value = enums;
var properties = path.split('.');
for (var i = 0, len = properties.length; i < len; ++i) {
value = value[properties[i]];
}
return value;
};
return app;
})(MyApp || {});
// Example usage
var status = MyApp.getEnum("ActionStatus.Open");
Run Code Online (Sandbox Code Playgroud)
现在实施2:
var MyApp = (function (app) { …
Run Code Online (Sandbox Code Playgroud) backbone.js ×1
data-binding ×1
javascript ×1
marionette ×1
memory ×1
optimization ×1
performance ×1
rivets.js ×1