数据绑定到Mustache模板?(最好干净简单)
Data binding to Mustache templates? (preferably clean and simple)
我想要的是一段代码,它可以为我提供一个干净简单的单向解决方案,将DOM的更改绑定到用于呈现它的对象。
示例:和对象
{name: 'Joe'}
用于渲染Mustache模板
<div><input val="{{name}}" /></div>
如何将inputfield中的更改事件与正确的属性相匹配?
迭代呢?
{{#users}}
<div><input val="{{name}}" /></div>
{{/users}}
有这样的东西吗?
编辑:是的,我知道Backbone,Angular,Ember,younameit。然而,我需要的是Mustache/Handlebars的一个具体案例。
Racive就是这样。带有数据绑定的Mustache。https://ractive.js.org
您想要的是Angular.js
在其他类似的框架中,如knockout.js、batman.js等,有一些不同的方法。
查看示例todo应用程序,看看不同的框架是如何做到这一点的
更新:
另一方面,如果所有的"绑定"都很简单,并且不太关心语法,那么有两种方法可以只与jquery一起使用,以最大限度地减少处理输入字段的代码数量:
- 每个模型字段一个输入字段,并且只有一个模型
var model = {
a: 1,
b: 2,
c: 3
}
$('#myForm').on('blur', 'input', function(e) {
var $this = $(this),
field = $this.data('model')
model[field] = $this.val()
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id='myForm'>
<input type='text' data-model='a' />
<input type='text' data-model='b' />
<input type='text' data-model='c' />
</form>
- 有点像第一个的扩展,如果每个模型有多个模型和多个字段,就可以将元素分组在一起。一个很好的例子是表编辑器,当每一行都绑定到数组中的元素,并且有几个字段绑定到一行中的单元格时
js
var models = { modelA : {...}, modelB: {...}}
$('#myForm').on('blur', 'input', function(e) {
var $this = $(this), field = $this.data('field')
, model = $this.data('model')
// last line can be smth like $this.closest('div.group').data('model')
models[model][field] = $this.val()
})
总结一下你的例子:
{{#users}}
<div><input data-model='users' data-index='{{ $index }}' val="{{name}}" /></div>
{{/users}}
$('#myForm').on('blur', 'input', function(e) {
var $this = $(this), index = $this.data('index')
, model = $this.data('model')
window.data[model][index][field] = $this.val()
})
检查jtmpl,它应该完全符合您的需求—渲染Mustache模板,并始终保持DOM和模型同步。
集合和节点属性是受支持的,您的示例语法应该按原样工作(只需正确的"val"->"value")。
我建议您看看vue.js
-它现在是一个被广泛采用的框架,比Angular轻得多(缩小600kb比缩小60kb,如果使用gzip则为20kb),并使用类似于胡子的语法。
好吧,设法找到了一种通过shadow-dom解决方案进行简单数据绑定的方法。这不是一个完美的解决方案,但目前可以。
相关文章:
- 简单的javascript在Shopify中不起作用
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 如何制作简单的php'在Javascript中的foreach等价物
- JQuery:向多个匹配结果添加换行符的最简单方法
- AJAX简单错误.XMLHttpRequest无法加载http://localhost/mpl/getPage.php.
- Moment/Jquery-一个简单时间线的愚蠢问题
- 什么's本地node.js服务器和python简单http服务器之间的区别
- 简单类测试未通过
- 简单地将拆分变量添加到对象中
- 通过javascript操作图像,非常简单
- 问题用moment JS制作一个简单的时间表
- 简单的ES6承诺问题-交换解决和拒绝参数
- 带有计数器、缩略图、进度条和淡入淡出效果的简单jQuery幻灯片
- 简单的JS函数.需要对变量进行澄清
- 简单的交换程序无法使用javascript
- 如何只使用特定的表行构建简单的手风琴
- 我怎么能让流星简单模式中的一个字段等于一个js变量,并且仍然让用户填写简单模式的其余部分
- react路由器使用简单的javascript路由器配置来处理不匹配的路径
- 简单的JavaScript方法链接
- 数据绑定到Mustache模板?(最好干净简单)