Javascript dojo应用程序中的关键字敲除绑定

Javascript dojo应用程序中的关键字敲除绑定,javascript,knockout.js,dojo,Javascript,Knockout.js,Dojo,我正在开发一个使用knockout和dojotoolkit的应用程序。我创建了一个模块,但不能将此关键字inmethod用作viewModel require(["dojo/_base/declare", "dojo/_base/lang", "http://ajax.aspnetcdn.com/ajax/knockout/knockout-3.0.0.js"], function(declare, lang,

我正在开发一个使用knockout和dojotoolkit的应用程序。我创建了一个模块,但不能将此关键字inmethod用作viewModel

require(["dojo/_base/declare", 
     "dojo/_base/lang",
     "http://ajax.aspnetcdn.com/ajax/knockout/knockout-3.0.0.js"],  function(declare, lang, ko){
    var GeekService = declare(null, {
        geeks: ko.observableArray(),            
        constructor: function(){
            //this.removeGeek = lang.hitch(this, this.removeGeek);
        },

        removeGeek: function(item){             
            console.log(this)
        }.bind(this) // Ensure that "this" is always this view model
    });

    ko.applyBindings(new GeekService());
})
如果我不使用lang.hitchthis,则使用this.removeGeek;在构造函数中,我无法通过removeGeek方法中的此关键字访问ViewModel对象

淘汰示例向我们展示了我们可以使用BindModel,这确保了始终是ViewModel

上面的应用程序运行,控制台写入:Window{top:Window,Window:Window,location:location,external:Object,chrome:Object…}


但是它应该返回GeekService wiewModel对象。

我不知道如何使用dojo解决这个问题,但发生这种情况的原因是当您调用.bindthis时。这是在functiondeclare,lang,ko{的上下文中,它是全局的,因此是window.var GeekService=declarenull,{正在使用对象文字而不是函数来设置GeekService,因此它内部不会获得GeekService的新上下文。在链接的示例中,这是viewmodel,因为SimpleListModel是一个函数而不是对象文字:var SimpleListModel=functionitems{我想分离视图和javscript对象端,所以我使用了这种组合。现有的项目正在使用dojo toolkit开发。绑定上下文的良好概述: