为什么这个dojo.mvc.Repeat不能在模板化的小部件中工作?

时间:2014-08-14 14:29:36

标签: javascript dojo

我想创建一个带有重复元素的模板化Dojo小部件。通过阅读dojotoolkit.org上的文档,看起来这应该可行:

widget.js:

define([
    'dojo/_base/declare',
    'dijit/_WidgetBase',
    'dijit/_TemplatedMixin',
    'dijit/_WidgetsInTemplateMixin',
    'dojo/text!./test.html',
    'dojox/mvc/getStateful',
    'dojox/mvc/Repeat',
    'dojox/mvc/Output',
    'dojox/mvc/at',
], function(declare, _WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin,
            template, getStateful) {
    var data = getStateful([
        {
            'id': 1
        },
        {
            'id': 2
        }
    ]);

    return declare([_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin], {
        templateString: template,
        data: data
    });
});

的test.html:

<section>
    <script type="dojo/require">at: "dojox/mvc/at"</script>
    <div data-dojo-type='dojox.mvc.Output' data-dojo-props="value: at(this.data[0], 'id')"></div>
    <div data-dojo-type="dojox.mvc.Repeat" data-dojo-props="children: this.data">
        <div>REPEAT</div>
    </div>
</section>

但是,“输出”小部件似乎正确检索第一个ID,但“重复”不显示任何内容。

为什么重复不在这里工作?我看到一些帖子说WidgetList可能会替换Repeat,但它具有相同的行为(即,不显示任何内容)。我错过了什么,或者这是预期的行为?

谢谢!

1 个答案:

答案 0 :(得分:1)

不确定为什么它对您不起作用,但我尝试将以下HTML放在与widget.js和test.html相同的目录中,并且它有效:

<!DOCTYPE html>
<html>
    <head>
        <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/dojo/1.10.0/dojo/dojo.js" data-dojo-config="parseOnLoad: 0, async: 1"></script>
        <script type="text/javascript">
            require({
                paths: {
                    "widgetlistintemplate": location.pathname
                }
            }, ["dojo/parser"], function (parser) {
                parser.parse();
            });
        </script>
    </head>
    <body>
        <div data-dojo-type="widgetlistintemplate/widget"></div>
    </body>
</html>
顺便说一下,你是对的,dojox / mvc / WidgetList是后继者dojox / mvc / Repeat。 dojox / mvc / Repeat已被弃用。

希望这有帮助。

最好, - Akira