当前位置: 首页 > 面试题库 >

Dojo Javascript变量范围

徐涵亮
2023-03-14
问题内容

我正在使用dgrid,并且尝试在外部设置dataStore。当页面加载时,我打电话aliasTicket.load()来创建网格。在网格加载时,datasourcenull为null。执行查询时,setAliasSource(aliasData);将设置。

没有错误,但是网格仍然是空的。正在使用数据更新aliasStore,但是即使刷新了网格也没有将其反映在网格上。查询后如何获取反映在网格中的数据?

Javascript对象

   var aliasTicket = (function (){

    var aliasData = [];

    require([ "dojo/store/Observable", "dojo/store/Memory"]);   
    var aliasStore = new dojo.store.Observable(new dojo.store.Memory({
        data: aliasData,
        idProperty: "id"
      }));

    return{

        load:function(){

            require([
                     ........

                   ], function(declare, Memory, OnDemandGrid, ColumnSet, Selection,
                     selector, Keyboard, DijitRegistry, editor, ColumnHider,
                     registry, Observable,lang) {

                aliasData = this.aliasData;

                var Store = this.aliasStore = new dojo.store.Observable(new dojo.store.Memory({
                    data: aliasData,
                    idProperty: "id"
                  }));

                console.log(Store);

                var CustomAliasNameGrid = declare([OnDemandGrid, selector, Selection, Keyboard, editor, DijitRegistry, ColumnHider]);

                  var aliasNameGrid = new CustomAliasNameGrid({
                    store: Store,
                    columns: {
                      id: {
                        label: "Id",
                        field: "id",
                        hidden: true,
                        autoSizeColumn: true
                      },

                      employeeTicketId: {
                        label: "Employee Ticket Id",
                        field: "employeeTicketId",
                        hidden: true,
                        autoSizeColumn: true
                      },

                      chkBox: selector({}),


                      aliasName: {
                        label: "Alias Names",
                        field: "aliasTicketName",
                        autoSizeColumn: true,
                        formatter: function(str) {
                          return str.replace(/\w\S*/g, function(txt) {
                            return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
                          });
                        }
                      }

                    },
                    selectionMode: "none",
                    loadingMessage: "Loading data...",
                    noDataMessage: "No results found....",
                    allowSelectAll: true
                  }, "aliasNameGrid");



                aliasNameGrid.refresh()

            });

        },

        setAliasSource: function (data){
            console.log(data);
            this.aliasSource = data;

        },

        setAliasData: function (data){
            this.aliasData = data;              
        },

        getAliasSource: function (){

            return this.aliasSource;
        }

    };

})();

设置数据存储数据

aliasData = [{.....},
             {.....},
             {......];


            require(["dijit/dijit"]);
            aliasTicket.setAliasSource(aliasData);              
            dijit.byId('aliasNameGrid').refresh();

问题答案:

您正在将“ this.Store”设置为对象数组,而不是真正的“ dojo store”对象。按照您的代码,我看不到您实际在哪里使用“
this.Store”。在网格代码内部,我确实看到了一个名为“ Store”的局部变量。

因此,我不确定是否在这里遵循您的代码示例,但是,您应该“设置”网格的存储,然后刷新它。这样的事情。

 setAliasSource: function (data){
        console.log(data);
        this.Store = data;
        dijit.byId('aliasNameGrid').set("store",new dojo.store.Observable(new dojo.store.Memory({ data: data,idProperty: "id"}));
        dijit.byId('aliasNameGrid').refresh();

    },


 类似资料:
  • 本章介绍当模板在访问变量时发生了什么事情,还有变量是如何存储的。 当调用 Template.process 方法时,它会在方法内部创建一个 Environment 对象,在 process 返回之前一直使用。 该对象存储模板执行时的运行状态信息。除了这些,它还存储由模板中指令,如 assign, macro, local 或 global 创建的变量。 它不会尝试修改传递给 process 的数据

  • 问题内容: 我知道变量作用域由块的开始和块的结尾包围。如果在块内声明了相同的变量,则会发生编译错误。但是,请看以下示例。 在这里,可以在方法中重新声明,尽管它已经在类中声明了。但是在块中,无法重新声明。 为什么类范围变量的重新声明不产生错误,而方法范围变量的重新声明却产生错误? 问题答案: 这是因为不是变量,而是实例字段。允许局部变量与字段具有相同的名称。为了区分变量和具有相同名称的字段,我们在实

  • 问题内容: 我知道变量作用域由块的开始和块的结尾包围。如果在块内声明了相同的变量,则会发生编译错误。但是,请看以下示例。 在这里,可以在方法中重新声明,尽管它已经在类中声明了。但是在块中,无法重新声明。 为什么类范围变量的重新声明不产生错误,而方法范围变量的重新声明却产生错误? 问题答案: 这是因为不是变量,而是实例字段。允许局部变量与字段具有相同的名称。为了区分变量和具有相同名称的字段,我们在实

  • 问题内容: 这将编译 这不会 我希望两者都能编译(也许这是C的工作方式?)。是什么原因导致无法在外部块中以相同的名称声明一个块中的变量? 问题答案: 简短的答案是:因为这是JLS§6.4中定义Java语言的方式。 您可能从其他语言中使用过,因此允许使用所谓的可变阴影。但是,Java语言的发明者认为这是一个笨拙的功能,他们不希望使用其语言: 此限制有助于检测其他一些非常模糊的错误。 但是,正如作者在

  • 我对Oracle相当陌生,但已经进行了很好的搜索。有人能解释一下与此相关的范围规则吗: 错误: 错误报告-ORA-06550:第17行,第55列:PLS-00201:标识符“VARIABLE2”必须声明ORA-06550:第17行,第17列:PL/SQL:忽略语句06550。00000-“第%s行第%s列:\n%s”*原因:通常是PL/SQL编译错误*行动: 为什么在我第二次尝试输出它时Varia

  • 问题内容: 我正在阅读“ CreateSpace Go 2012编程入门” 在第86页上,我发现了这种邪恶的魔力 1)为什么不复位?2)正在返回,或者是否如此聪明以至于它可以与所有东西配合使用? 问题答案: 为了清楚起见,我将为这两个函数分配名称: 工厂返回闭包–函数是Go中的一等公民,即它们可以是右手表达式,例如: 在您的代码中,闭包环绕工厂的上下文,这称为 词法作用域 。这就是变量在闭包内部可