在bootstrap模态中对knockoutjs ViewModel应用绑定
Applying binding to knockoutjs ViewModel in a bootstrap modal
我正试图将淘汰赛竞标应用于模态弹出窗口。
我有家禽ViewModel:
var ViewModel = function () {
var self = this;
self.radioSelectedOption = ko.observable("optionFreeText");
// It only show textarea when free text message option value is selected
self.hasFreTextMessageSelected = ko.computed(function () {
return (self.radioSelectedOption() === "optionFreeText");
});
}
和下面的HTML Modal:
<section id="test-modal" class="modal fade" tabindex="-1" data-width="760">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
<h4 class="modal-title">Enviar Mensagem</h4>
</div>
<div class="modal-body">
<div class="form-body">
<div class="form-group">
<label>Tipo de Mensagem</label>
<div class="radio-list">
<label class="radio-inline">
<input type="radio" data-bind="checked: radioSelectedOption" name="optionsRadiosMessageType" id="optionRadioFreeText" value="optionFreeText" class="make-switch optionsRadiosMessageType" checked>
Livre
</label>
<label class="radio-inline">
<input type="radio" data-bind="checked: radioSelectedOption" name="optionsRadiosMessageType" id="optionRadioStateRefresh" value="optionStateRefresh" class="make-switch optionsRadiosMessageType">
Pedido de Estado
</label>
</div>
</div>
<div for="textareaFreeText" class="form-group" data-bind='visible: hasFreTextMessageSelected'>
<label>Texto</label>
<textarea id="textareaFreeText" class="form-control" rows="3"></textarea>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" data-dismiss="modal" class="btn btn-default">Cancel</button>
<button type="button" class="btn blue">Enviar</button>
</div>
</section>
在事件on document ready:
ko.applyBindings(new ViewModal());
当我第一次运行代码时,它工作完美,但在第一个模态处理后,它停止工作。ViewModel在第一次处理后永远不会更新,但我可以获得旧值。
看起来好像绑定被删除了(但实际上没有)。如果我试图再次绑定它,我得到了knockout异常"你不能对同一元素多次应用绑定"…
我想你这里有很多错别字,容易破坏Knockout绑定。
例如:- 您定义
var ViewModel = function () {...}
- 然后通过
ko.applyBindings(new ViewModal());
- 然后通过
- 你的视图模型使用可观察对象
self.radioSelectedOption
- 但是您的数据绑定使用
data-bind="checked: radioSelectedOptionMessage"
- 但是您的数据绑定使用
- 在ViewModel中,检查单选按钮的值是否为
(self.radioSelectedOption() === "optionPreDefined"
- 但是这个值在你的标记中没有定义。
一旦解决了这些问题,生成的代码应该可以工作了:
在jsFiddle
中的工作演示同样,在使用var self = this
技巧时,您不必将this
作为第二个参数传递给计算属性。
相关文章:
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- Emberjs应用程序加载在除Index之外的所有路由上
- 使用电话间隙在Android应用程序中显示SQL Lite的数据
- 跟踪在页面加载时应用内联样式的JavaScript
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- 如果文本字段为空,则使用JavaScript应用CSS样式
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- 为什么在单独的函数中应用时转换会闪烁/断断续续(D3)
- angular 1.5应用程序中的导航栏
- 在Web应用程序中使用Highcharts javascript
- angularjs+rails应用程序中未显示模板
- 从html创建一个指令,该指令按类名应用函数
- 使用acess代币登录Facebook,并通过网络应用程序离线发布
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- 科尔多瓦页面类应用程序中的多个谷歌地图
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- Angularjs-utils高亮过滤器在搜索时破坏应用程序
- 在应用绑定最佳实践之前,使用json数据初始化Knockout ViewModel
- 在bootstrap模态中对knockoutjs ViewModel应用绑定