0

我尝试使用 dojox mvc repeat 和 group 创建 dojox mobile 手风琴。我什至尝试在 dojox.mvc.Repeat 的 data-dojo-props 中使用 removeRepeatNode:true ,我得到一个 JS 错误

dojo/parser::parse() 错误 TypeError: b._at is undefined

我使用道场 1.9

有人可以帮忙吗?

4

1 回答 1

0

我在dojo-interest mailing list中看到了同样的问题。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-typedata-dojo-mixinsdata-dojo-props ,您需要在 data-mvc-child-type 、 data-mvc- 中指定它们声明 dojox/mvc/WidgetList 的 child-mixins 和 data-mvc-child-props。

有关更多信息,请参阅我的邮件列表回复

最好的,阿基拉

于 2013-11-11T15:18:06.973 回答