从jQuery滑块控件中获取击倒计算的可观测值
Getting knockout computed observables to fire from jQuery slider control
我有一个用于jQuery滑块控件的自定义淘汰绑定器。滑块正在更新可观察到的currentPage,但依赖于currentPage()的通用ko.computed永远不会触发为什么会出现这种情况,以及如何修复它,从而激发泛型
我在这里找到了使用带有淘汰的异步ajax调用的技术。。。异步相关观察对象。显然,dependentObservable
已经被computed
所取代。我可以让它与dependentObservable
或computed.deferEvaluation=false
一起工作,但我需要deferEvaluation=true
,这样ajax调用就不会被多次触发。
小提琴http://jsfiddle.net/jeljeljel/3WN6v/
HTML
<div style="margin:10px;" data-bind="slider: currentPage, sliderOptions: {min: 0, max: 10, range: 'min'}"></div>
<div id="plugin" data-bind="template: { name: 'template1', data: $data }" ></div>
<script type="text/html" id="template1">
<span data-bind="text: displayText"></span>
</script>
Javascript
// create ko custom binding handler for slider control
ko.bindingHandlers.slider = {
init: function (element, valueAccessor, allBindingsAccessor) {
var options = ko.toJS(allBindingsAccessor().sliderOptions) || {};
$(element).slider(options);
ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
$(element).slider('destroy');
});
ko.utils.registerEventHandler(element, 'slidechange', function (event, ui) {
var observable = valueAccessor();
observable(ui.value);
});
}
};
function DataModel() {
var self = this;
self.currentPage = ko.observable(0);
self.displayText = ko.observable(0);
ko.computed({
read: function () {
$.ajax({
url: '/echo/json/',
//data: { page: currentPage() },
success: function(){
self.displayText(currentPage());
}
});
},
deferEvaluation: true
});
}
dataModel = new DataModel();
ko.applyBindings(dataModel);
您实际上并没有更新滑块更改事件中的displayText,因为您发送到绑定事件的valueAccessor是您绑定到滑块的属性,即currentPage。更改自定义绑定的签名以包含viewModel,然后使用它更新displayText:的值
// create ko custom binding handler for slider control
ko.bindingHandlers.slider = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var options = ko.toJS(allBindingsAccessor().sliderOptions) || {};
$(element).slider(options);
ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
$(element).slider('destroy');
});
ko.utils.registerEventHandler(element, 'slidechange', function (event, ui) {
viewModel.displayText(ui.value);
});
}
};
相关文章:
- 根据元素和容器大小计算边距
- 从Rally获取一个特定的标记,以便计算另一个字段中的值
- 使用D3.js计算带有字母间距的文本长度
- 使用CSS或JavaScript计算分页符的数量
- 可以't计算自定义谷歌地图的js
- 如何计算每个元素's的高度,并将这些值用作函数中的变量
- JavaScript计算帮助(乘以时间)
- 如何计算对象文字中的键
- JavaScript循环无法正确计算/显示结果
- 与域在同一台计算机上运行的NODEJS服务器的CORS错误
- 四舍五入JavaScript计算
- 计算HTML中的页数
- 使用jQuery计算数组中的对象以更改进度条
- 如何在jquery中使用实时计算求和值
- 计算多个项目的价格
- 计算CSS3缩放框在另一个框中的最高位置
- 如何计算二十面体的法线
- if(foo!==null)的计算结果为true,即使foo为null
- 在Angular中重新使用HTML端的计算文本
- KnockoutJS-依赖的可观测量或计算的可观测值