创建一个dojo小部件以通过请求加载另一个页面

时间:2015-08-03 17:11:11

标签: javascript dojo

我想让这个小部件显示http://localhost:8080/webapp/trending页面上的内容,无论我在哪里:

<div data-dojo-type="js/widget/SATrending"></div>

现在它没有将内容加载到页面上,我不确定我错过了什么。

JS(js / widget / SATrending):

require([
"dojo/_base/declare",
"dojo/dom-construct",
"dojo/parser",
"dojo/ready",
"dijit/_WidgetBase",
"dojo/request"],
function(declare, domConstruct, parser, ready, _WidgetBase, request) {
    declare("js/widget/SATrending",[_WidgetBase], {
        top: 10,
        constructor: function() {
        },
        postMixInProperties: function() {
        },
        buildRendering: function() {
            var txt;

            request("http://localhost:8080/webapp/trending").then(
                    function(text) {
                        txt: text;
                    },
                    function(error) {});

            this.domNode = txt;
        },
        /*
         * Setters
         */
        setTopAttr: function(top) {
            this.top = top;
        },
        postCreate: function() {
        },
        startUp: function() {
        }
    }); 
});

1 个答案:

答案 0 :(得分:0)

你有几个问题。首先,在您的成功回调中,txt: text不是有效的JavaScript。其次,您可能希望将txt分配给this.domNode.innerHTML,而不仅仅是this.domNode

但最重要的是,this.domNode = txt;永远不会做你可能期望的事情,因为txt 实际上并未实际更新,直到请求异步完成,但是您在发送请求后立即设置this.domNode

以下是将buildRendering代码重组为实际应用的内容的示例:

this.inherited(arguments);
var self = this;

request("http://localhost:8080/webapp/trending").then(
    function(text) {
        self.domNode.innerHTML = text;
    },
    function(error) {});

有关您的代码的其他说明:

  • 如果您定义了小部件生命周期方法(postMixInProperties,buildRendering,postCreate,startup),请不要忘记调用this.inherited(arguments)。 (默认为constructor个链,因此您不应该在那里调用它。)
  • startup应该有一个小写的u。
  • 您可以使用ContentPane及其href属性来更轻松地完成您在此处尝试的操作。