也许这看起来有点倒退,但我有一个与 Rivets.js 绑定的视图,我希望该视图在初始化时填充模型。
用例是我使用服务器端渲染来返回一个片段(视图),包括铆钉的数据属性。所以没有 JSON 从服务器返回到客户端。
现在,通过按“编辑”,用户可以将内容置于“编辑”模式,并随意开始编辑。(使用 contenteditable,但我猜这超出了范围)。
那么如何确保模型填充了 init 视图中的值呢?
也许这看起来有点倒退,但我有一个与 Rivets.js 绑定的视图,我希望该视图在初始化时填充模型。
用例是我使用服务器端渲染来返回一个片段(视图),包括铆钉的数据属性。所以没有 JSON 从服务器返回到客户端。
现在,通过按“编辑”,用户可以将内容置于“编辑”模式,并随意开始编辑。(使用 contenteditable,但我猜这超出了范围)。
那么如何确保模型填充了 init 视图中的值呢?
我知道这个问题有点过时了,但我最近尝试了铆钉,我遇到了同样的问题。
解决方案:
// In your rivets configuration you disable preload:
rivets.configure({
templateDelimiters: ['[[', ']]'],
preloadData: false
});
// you bind your data
var binding = rivets.bind($('#auction'), {auction: auction});
// you manually publish it once to populate your model with form's data
binding.publish();
就是这样。我仍然不知道如何禁用每次绑定的预加载
来自 Rivets 网站上的示例(分配给“rivetBinding”)
var view = rivets.bind($('#auction'), {auction: auction});
将rivetBinding.publish();
使用视图中所有具有“发布=真”的绑定的值引导模型。
这个问题很老,但仍然没有公认的答案,所以这里是:
您需要禁用预加载配置,以便铆钉不会在您进行绑定时用您模型中的内容覆盖输入中的任何内容。这可以通过preloadData=false
全局(rivets.configure(...)
)或视图范围(第三个参数rivets.bind(...)
)的配置来完成。
绑定后,您需要发布视图(将值拉到模型中)。您还需要通过调用设置观察者sync()
,否则您的绑定方法将不会被触发。
使用与先前答案相同的示例:
var view = rivets.bind($('#auction'), { auction: auction }, {
preloadData: false
});
view.publish();
view.sync();