如何在执行另一个函数之前等待函数完成

时间:2014-02-14 07:01:58

标签: javascript jquery backbone.js

我正在使用selecter jquery。我通过输入代码

来初始化它
$("select").selecter();

我需要确保在开始添加元素之前已经完成了formstone selecter jquery库。所以我所做的就是使用$.when函数

initialize: function(){
    $.when($("select").selecter()).then(this.initOptions());
},

initOptions: function(){
    this.$el.find('.selecter').addClass('something');
}

但这不起作用。在执行另一个函数之前,我怎么能等到formstone选择器正在做它的事情?

谢谢,

更新

以下是我所做的更新,但它不起作用。

initialize: function(){
   $("select").selecter({callback: this.initOptions });
},

initOptions: function(){
    this.$el.find('.selecter').addClass('something');
}

3 个答案:

答案 0 :(得分:0)

有一个回调选项。

  

作为回调传递的函数将接收新选择的值作为第一个参数

应为$("select").selecter(callback: function() { alert('callback fired.') }); 或如图所示

$("select").selecter({
    callback: selectCallback
});

function selectCallback(value, index) {
    alert("VALUE: " + value + ", INDEX: " + index);
}

答案 1 :(得分:0)

我认为关于回调编辑代码的问题是这可以引用任何东西。请尝试以下代码

var selectorObj = {
 initialize: function(){
    $("select").selecter({callback: selectorObj.initOptions });
    },
initOptions: function(){
    this.$el.find('.selecter').addClass('something');
     }
};

为您http://jsfiddle.net/6Bj6j/

创建了一个工作小提琴手

css变形了。只需选择单击下拉列表时弹出的内容即可。您将收到一个写在回调中的警报。

答案 2 :(得分:0)

提供的代码段的问题是回调的范围:

var selectorObj = {
    initialize: function(){
        $("select").selecter({ callback: selectorObj.initOptions });
    },
    initOptions: function(){
        // 'this' refers to the "$('.selecter')" jQuery element
        this.addClass('something');
    }
};

但是,如果您只需要为渲染元素添加一个类,则应使用' customClass'选项:

$("select").selecter({
    customClass: "something"
});

如果您需要做更多,您可以直接访问Selecter元素:

var $selecter = $("select").selecter().next(".selecter");

$selecter.addClass("something").find(".selecter-selected").trigger("click");

旁注:我是Formstone的主要开发者。如果您对新功能或更好的实现有任何建议,只需在GitHub上打开一个新问题。