首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何订购基因敲除绑定?

如何订购基因敲除绑定?
EN

Stack Overflow用户
提问于 2012-11-03 23:38:03
回答 4查看 4.5K关注 0票数 7

我正在使用knockout.js。我陷入了一个有点奇怪的情况(这很难解释,但我正在努力,如果我不清楚,很抱歉)。我在一个select-list上使用了自定义绑定和选项绑定:

代码语言:javascript
复制
  <select data-bind="options : arrayOfOptions, optionsText: 'Name', 
           optionsValue: 'Name', chosen: { }">
  </select>

ko.bindingHandlers.chosen = {
    init: function (element, valueAccessor, allBindingAccessor, 
                    viewModel, bindigContext) {
        var options = ko.utils.unwrapObservable(valueAccessor() || {});
        $(element).chosen(options);
    }
};

在这里,在运行时,selectlist将填充来自arrayOfOptions数组的所有可用选项,而chosen是一个自定义绑定,我在其中对select-list应用了一个CHOSEN PLUGIN

现在我面临的问题是,在自定义绑定中,当我在选择列表上应用choose plugin时,arrayOfOptions数组中的选项并没有填充到选择列表中。简单地说,意思是在options binding之前执行custom binding。有没有人能给我一个解决方案,以便在绑定选项后应用自定义绑定?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-11-04 00:22:30

将您对chosen的调用移到更新中。

http://jsfiddle.net/jearles/avSfa/28/

--

代码语言:javascript
复制
ko.bindingHandlers.chosen = {
    init: function(element, valueAccessor, allBindingsAccessor, viewModel) {
        var allBindings = allBindingsAccessor();

        var options = {default: 'Select one...'};
        $.extend(options, allBindings.chosen)

        $(element).attr('data-placeholder', options.default);                
    },
    update: function(element, valueAccessor, allBindingsAccessor, viewModel) {
        $(element).chosen();
    }
};

--

或者,您可以使用setTimeout将对chosen的调用移到执行队列的底部。这将为Knockout选项提供绑定时间,以便在chosen尝试转换它之前完成它的工作。

代码语言:javascript
复制
ko.bindingHandlers.chosen = {
    init: function (element, valueAccessor, allBindingAccessor, 
                    viewModel, bindingContext) {
        var options = ko.utils.unwrapObservable(valueAccessor() || {});
        setTimeout(function() { $(element).chosen(options); }, 0);
    }
};
票数 5
EN

Stack Overflow用户

发布于 2014-09-04 00:25:36

使用此绑定所依赖的bindingHandler名称数组创建一个after属性。

ko.bindingHandlers.chosen = { init: function (element, valueAccessor, allBindingAccessor, viewModel, bindigContext) { var options = ko.utils.unwrapObservable(valueAccessor() || {}); $(element).chosen(options); }, after:['options'] };

票数 10
EN

Stack Overflow用户

发布于 2014-02-18 17:21:01

代码语言:javascript
复制
ko.bindingHandlers.chosen = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
    var options = allBindingsAccessor().options;

    options.subscribe(function (newValue) {
        $(element).chosen();
        $(element).trigger("chosen:updated");
    });

    var value = allBindingsAccessor().value;
    value.subscribe(function (newValue) {
        $(element).trigger("chosen:updated");
    });
},
update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
    if (element.options.length > 0) {
        $(element).chosen();
        $(element).trigger("chosen:updated");
    }
}

};

这对我使用KO JS 3.0很有效

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13210663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档