JQuery Dialog - Установить текст кнопки без использования ключа - PullRequest
4 голосов
/ 10 марта 2011

Мне нужно обеспечить локализацию для текста кнопки диалога JQuery, однако в диалоге JQuery обычно используется ключ для текста кнопки:

$(DialogDiv).dialog({
    bgiframe: true,
    resizable: false,
    buttons: { Save : saveCallback, Cancel : cancelCallback}
});

Есть ли способ отдельно указать текст, не используя ключ в качестве текстового значения? В настоящее время я использую это, однако я не фанат использования локализованных значений в качестве ключей:

var buttonCallbacks = {};       
buttonCallbacks[com.i18n.getText("Save")] = function() {};
buttonCallbacks[com.i18n.getText("Cancel")] = function() {};

$(DialogDiv).dialog({
    bgiframe: true,
    resizable: false,
    buttons: buttonCallbacks 
});

Спасибо.

Ответы [ 3 ]

6 голосов
/ 10 марта 2011

Если вы посмотрите на опции кнопки для диалога, вы заметите, что второй из перечисленных форматов принимает массив объектов:

$(DialogDiv).dialog({
    bgiframe: true,
    resizable: false,
    buttons: [ { 
        text: com.i18n.getText("Save"),
        click: saveCallback
      }, {
        text: com.i18n.getText("Cancel"),
        click: cancelCallback
      }
    ]
});
1 голос
/ 10 марта 2011

Только что достигло пика у источника (1.8):

var button = $('<button type="button"></button>')
    .text(name) // name is object key from each
    .click(function() { fn.apply(self.element[0], arguments); })
    .appendTo(uiDialogButtonPane);

Так что это не похоже на это.

Теперь можно добавить обратный вызов после шоу, который изменяет кнопки. Это кажется очень хакерским - я бы посоветовал, как вы это делаете в настоящее время.

0 голосов
/ 10 марта 2011

Я могу рассказать вам, как вносить изменения ex-post-facto после завершения инициализации, но выполнение этого в конструкторе потребует фундаментального изменения библиотеки jQuery UI, что, конечно, вполне выполнимо, так как это открытый код.Функциональность вам пока не предоставляется.

Вместо этого я бы предложил следующее, которое выполнит изменения, которые вы желаете после инициализации диалога:

$('.myDialogSelector').parent()
    .find('span.ui-button-text:contains("OriginalNameFromKey")')
    .html("New Button Text");

См. Рабочую скрипку здесь .

Могу я спросить, почему формат конструктора имеет какое-либо значение для вас?Я с трудом представляю себе особенности использования.То, как вы строите ваше buttons отображение, кажется просто отличным.

...