如何在mvc中使用knockout js (MVVM)绑定value summernote编辑器
How to bind value summernote editor in mvc using knockout js (MVVM)
我已经成功地集成了summernote编辑器在我的mvc项目,但我不能得到值形式textarea
i have use knockout (MVVM) structure.
<tbody data-bind='with:demo'>
<textarea class="summernote" placeholder="Description" data-bind='value: Description'></textarea>
</tbody>
var Demo = function (demo) {
var self = this;
self.Description = ko.observable(demo? demo.Description : '');
}
var DemoViewModel = function () {
var self = this;
self.demo= ko.observable(new Demo());
}
ko.applyBindings(new DemoViewModel ())
您最好的选择是创建自定义绑定,如下所示
ko.bindingHandlers.summernote = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var value = ko.unwrap(valueAccessor());
var $element = $(element);
$element.html(value).summernote({
callbacks:{
onChange: function (contents) {
valueAccessor()(contents);
}
}
});
}
};
你可以叫它
<textarea data-bind="summernote: Description"></textarea>
Summernote,像许多其他"神奇"的JS库一样,在初始化编辑器时修改原始html元素并附加自己的DOM结构。这通常会导致在与支持并鼓励通过元素属性进行数据绑定的JS框架集成时出现问题。
关于你的代码样本,我猜你是初始化的summernote与一些jQuery代码,看起来类似:
$('.summernote').summernote(...);
现在,由于summernote创建了一个类名为note-editable
的编辑器div元素,您可以通过使用一个回调参数以编程方式设置knockout绑定:
$('.summernote').summernote({
oninit: function() {
$('.note-editable').attr('data-bind','html: Description');
}
});
确保ko初始化发生在 summernote初始化之后。另外请注意,我将value绑定替换为html绑定。虽然我对淘汰赛一点也不熟悉,但我很确定你会需要它……
这个问题涉及到html以及浏览器如何呈现它。
样本
<tbody data-bind='with:demo'>
<textarea class="summernote" placeholder="Description" data-bind='value: Description'></textarea>
</tbody>
呈现为。tbody
去除,敲除后找不到Description
结合
<textarea class="summernote" placeholder="Description" data-bind="value: Description"></textarea>
查看jsfiddle获取更多信息。这个问题与浏览器自动插入tbody标签的事实有关,在您的情况下删除了标签。这里有一个类似的问题,但foreach
您可以通过以下方式修复
<table>
<tbody data-bind="with:demo">
<tr>
<td>
<textarea placeholder="Description" data-bind="value: Description"></textarea>
</td>
</tr>
</tbody>
</table>
查看jsfiddle获取更多信息
或者添加div
标签(jsfiddle)
<div data-bind="with:demo">
<tbody>
<textarea placeholder="Description" data-bind="value: Description"></textarea>
</tbody>
</div>
注意:tbody
将在结果html
相关文章:
- 在VanillaJS中模拟模型双向数据绑定
- 无法通过数组映射绑定
- 主干-不管怎样,检查事件以前是否绑定过
- 用于搜索的聚合物嵌套绑定
- Angular:更新一次性绑定的数据
- 如何使用ngrepeat和双向绑定获得指令的隔离范围
- react.js中的密钥绑定
- 使用regex的jquery keydown绑定不会验证撇号和句点
- 将事件绑定到其他UI组件's函数,在Kendo MVVM中
- 获取 ViewModel 绑定到 HTML 元素 Kendo UI MVVM
- Kendo MVVM 使用换行符将文本绑定到文本区域
- Kendo,如何将MVVM文本:字段绑定到远程DataSource
- 使用metro.js日期选择器敲除mvvm绑定
- 剑道MVVM绑定到自执行匿名模块函数
- ExtJS 5 -链接存储绑定表单字段错误(MVVM)
- 剑道UI "checked"外部模板中最后一个单选按钮的MVVM绑定不工作
- 剑道UI:无法使用MVVM绑定数据到列表视图
- 与Vue.js的MVVM绑定不能按预期工作
- 如何在mvc中使用knockout js (MVVM)绑定value summernote编辑器
- kendo mobile中的Listview在mvvm模式下没有绑定到可观察对象