【问题标题】:overriding a jquery ui widget string option with an object用对象覆盖 jquery ui 小部件字符串选项
【发布时间】:2012-10-23 13:11:25
【问题描述】:

我希望 jquery ui 小部件选项默认为字符串,但我希望它能够被对象覆盖。当我这样做时,我实际上以某种奇怪的方式将字符串转换为一个对象,然后用我传入的任何对象进行扩展。

$.widget("ui.test", {

    options: {
        anOption: "a,b,c"
    },

    _create: function() {
        console.log(this.options);
    }

});

$('div').test({
    anOption: {
        a: 'A'
    }
});

如果我跳过将选项传递给小部件,它将在 _create 方法中作为字符串接收。如果我传入一个对象,就会发生奇怪的行为。在 chromes js 控制台日志中,我得到了这个,这不是我想要的。

Object
anOption: Object
0: "a"
1: ","
2: "b"
3: ","
4: "c"
a: "A"

我该如何解决这个问题?

jsfiddle:http://jsfiddle.net/MatteS75/s9wK2/

【问题讨论】:

  • 它将字符串转换为一个对象,每个字符都成为基于其索引的属性。你希望它产生什么?改写anOption 这样anOption: { a: "A" }
  • 看起来小部件选项功能是这样工作的。 var s = "a string"; console.log($.extend({}, s, {a: "new"}));​
  • 我在 jquery ui 本身也遇到了这个问题,即 resizable 小部件:stackoverflow.com/questions/13028342/…

标签: jquery jquery-ui jquery-widgets


【解决方案1】:

如果您在创建小部件后更改选项,它将用您想要的对象覆盖选项。这可以接受吗?

$.widget("ui.test", {

    options: {
        anOption: "a string"
    },

    _create: function() {
        console.log(this.options.anOption);
    }

});

$('div').test({});


$('div').test("option", "anOption", {
    a: "option1",
    b: "option2"
});

var anOption = $('div').test("option", "anOption");

​console.log(anOption);​

【讨论】:

  • 我不能接受这个解决方案,尽管感谢你现在给我一个可能的解决方法。问题是,我无法控制其他开发人员如何使用这个小部件,并且希望能够在第一次初始化时让所有选项真正起作用。
  • 明白。我想我会发布一个可能的解决方法。感谢您回复我的解释!我认为这是很好的反馈!
【解决方案2】:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多