Мобильный аккордеон dojox с использованием dojo mvc не работает

Я попытался создать мобильный аккордеон dojox, используя повтор и группу dojox mvc. я даже пытался использовать removeRepeatNode:true в data-dojo-props dojox.mvc.Repeat, и я получаю ошибку JS, которая

ошибка dojo/parser::parse() TypeError: b._at не определен

Я использую додзё 1.9

может ли кто-нибудь помочь в этом?


person Srinivasan    schedule 11.11.2013    source источник


Ответы (1)


Я видел тот же вопрос в листе рассылки dojo-interest. dojox/mvc/Repeat является устаревшим модулем. dojox/mvc/WidgetList заменяет его.

В приведенном ниже коде показано, как dojox/mobile/Accordion можно использовать с dojox/mvc/WidgetList:

<!DOCTYPE html>
<html>
    <head>
        <title>Accordion</title>
        <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/dojo/1.9.0/dojox/mobile/deviceTheme.js"
            data-dojo-config="mblThemeFiles: ['base', 'Accordion']"></script>
        <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/dojo/1.9.0/dojo/dojo.js"
            data-dojo-config="async: 1, parseOnLoad: 0"></script>
        <script type="text/javascript">
            require([
                "dojo/_base/declare",
                "dojox/mvc/at",
                "dojox/mobile/parser",
                "dojox/mobile/Accordion",
                "dojox/mvc/WidgetList",
                "dojox/mvc/Output",
                "dojox/mvc/_InlineTemplateMixin",
                "dojox/mobile",
                "dojox/mobile/ContentPane"
            ], function(declare, at, parser, Accordion){
                declare("my.Accordion", Accordion, {
                    addChild: function(widget, index){
                        this.inherited(arguments, [widget, index * 2]);
                    }
                })
                window.at = at;
                window.model = [
                    {title: "foo", content: "Foo", selected: true},
                    {title: "bar", content: "Bar"},
                    {title: "baz", content: "Baz"}
                ];
                parser.parse();
            });
        </script>
    </head>
    <body>
        <div data-dojo-type="my.Accordion"
            data-dojo-mixins="dojox/mvc/WidgetList,dojox/mvc/_InlineTemplateMixin"
            data-dojo-props="children: model"
            data-mvc-child-type="dojox/mobile/ContentPane"
            data-mvc-child-mixins="dojox/mvc/Templated"
            data-mvc-child-props="label: at(this.target, 'title'), selected: at(this.target, 'selected')">
            <script type="dojox/mvc/InlineTemplate">
                <div>
                    <span data-dojo-type="dojox/mvc/Output"
                        data-dojo-props="value: at('rel:', 'content')"></span>
                </div>
            </script>
        </div>
    </body>
</html>

Вот некоторые хитрости:

  • Способ, которым dojox/mobile/Accordion вставляет заголовок, не хорошо работать с тем, как dojox/mvc/WidgetList вызывает dojox/mobile /Accordion.addChild(). Вам нужно будет удвоить индекс, чтобы обойти это.
  • Данный шаблон Dojo не позволяет использовать data-dojo-type. , data-dojo-mixins или data-dojo-props в корневом узле шаблона, вы нужно будет указать их в data-mvc-child-type, data-mvc-child-mixins и data-mvc-child-props, где объявлен dojox/mvc/WidgetList.

Дополнительную информацию см. в ответе моего списка рассылки.

Бест, Акира

person asudoh    schedule 11.11.2013
comment
Спасибо за ответ пользователя, но у меня все еще есть некоторые проблемы с ним в рабочем свете. Код в скрипке работает нормально, но я работаю над мобильным приложением Worklight 6, и теперь у меня другая проблема. Когда в моем проекте мне требуется dojox.mvc.WidgetList, я получаю ошибку сервера 500 в _TemplatedMixin.js. Я пробовал это и раньше, и результат был таким же. Даже если я не использую dojox.mvc.WidgetList где-либо в своем html, а просто требую его, я получаю эту ошибку - person Srinivasan; 12.11.2013
comment
Два предложения: 1) Учитывая, что вы сказали, что ошибка возникает при загрузке _TemplatedMixin.js, вы можете посмотреть, работает ли какой-либо виджет шаблона в вашей среде. 2) Учитывая, что это происходит с определенным продуктом (Worklight), вы можете обратиться в службу поддержки этого продукта. - person asudoh; 13.11.2013
comment
У меня похожая проблема, за исключением того, что у меня есть несколько детей, которые должны быть в каждом аккордеоне. Кажется, что скрипка работает только в том случае, если есть отношения 1 на 1. Есть ли способ сделать вторую петлю для детей? может ли список виджетов быть потомком списка виджетов? прямо сейчас у меня есть куча элементов списка, разделенных по категориям, и я использую dojox.dtl для этого. пытались перенести наш код в mvc - person tik27; 23.06.2014