dojo filteringselect с вызовом ajax - как заполнить поле выбора возвращаемыми значениями - PullRequest
0 голосов
/ 11 августа 2011

Мне кажется, я справился со сложными вещами. У меня есть форма с 2 фильтрами выбора полей. Первый заполняется жестко закодированным массивом из 3 значений (позже он станет динамическим). Когда я выбираю значение, я вызываю json-rpc, захожу в свою базу данных и возвращаю мне значения, которые я хочу для второго поля. Думайте об этом как о стране, выбранной США - база данных возвращает только американские города для заполнения второго поля.

Это мой Javascript для заполнения второго текстового поля:

function category_changed()
{
    var store = directoryBroker.getSubCategorys(document.getElementById('categoryId').value);
    store.addCallback(
        function (response)
        {
            var result = dojo.eval("(" + response + ")");
            if (typeof(result)!='undefined')
            {
                 document.getElementById('subCategoryId').disabled = false;
                 document.getElementById('subCategoryId').value = result[0].id;
            }
        }    
    );
}

Это php для создания формы:

$category = new Zend_Dojo_Form_Element_FilteringSelect('categoryId');
    $category
        ->addMultiOption('a', '-- Please Select --')
        ->addMultiOptions($directoryModel->getAllCategorysForSelect())
        ->setValue('a')
        ->setRequired(true)
        ->setAttribs(
            array(
                'style' =>  'width: 400px',
                'onchange' => 'JavaScript: category_changed();'
            )
        )
        ->setLabel("Category:")
        ->addFilter('StringTrim')
        ->addValidator('int');


  $subCategory = new Zend_Dojo_Form_Element_FilteringSelect('subCategoryId');
    $subCategory
        ->addMultiOption('-1', '-- Select Category First --')
        ->setRequired(true)
        ->setAttribs(
            array(
                'disabled' => 'disabled',
                'onchange' => 'JavaScript: subCategory_changed();',
                'style' => 'width: 400px;'

            )
        )
        ->setLabel("Sub Category:")
        ->addValidator('int');

Я пробовал несколько разных способов установки значения, но оно, похоже, не изменится ... Объект результата выглядит следующим образом:

result[0] "[{"name":"Test1","id":"1"}]"

Все, что я хочу, это "Test1" в качестве значения, я уверен, что это что-то простое, но просто не могу это увидеть!

1 Ответ

1 голос
/ 11 августа 2011

Я думаю, что вам нужно изменить свои звонки на

document.getElementById('subCategoryId')

на вызов, который извлекает экземпляр вашего фактического виджета dijit:

var secondaryFilteringSelect = dijit.byId('subCategoryId');

document.getElementById и dojo.byId возвращают только физические узлы dom элементов, а не фактический объект виджета javascript. Вы хотите использовать dijit.byId вместо.

Затем с этим виджетом вы можете использовать функцию set виджета, чтобы установить его свойства

secondaryFilteringSelect.set('disabled', false);
secondaryFilteringSelect.set('value', result[0].id);

Для получения дополнительной информации ознакомьтесь с документами FilteringSelect API .

Кроме того, для добавления новых параметров в FilteringSelect на основе изменений в первом меню вы, вероятно, захотите взглянуть на унаследованный метод FilteringSelect addOption

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...