Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 提线木偶js-如何制作咖啡脚本';在这个自定义区域I';我在建什么?_Javascript_Coffeescript_Jquery Ui Dialog_Marionette_Region - Fatal编程技术网

Javascript 提线木偶js-如何制作咖啡脚本';在这个自定义区域I';我在建什么?

Javascript 提线木偶js-如何制作咖啡脚本';在这个自定义区域I';我在建什么?,javascript,coffeescript,jquery-ui-dialog,marionette,region,Javascript,Coffeescript,Jquery Ui Dialog,Marionette,Region,在本视频教程的22:30,作者用coffeescript做了一些我无法翻译成Javascript的事情。他使用粗箭头从内部回调中维护自定义区域的上下文。因此,他能够在对话框close回调中调用区域上的close?如何在Javascript中实现这一点 这是我的自定义区域尝试,但在调用此.closeDialog()时失败,因为“this”指的是对话框而不是区域: var DialogRegion = Backbone.Marionette.Region.extend({

在本视频教程的22:30,作者用coffeescript做了一些我无法翻译成Javascript的事情。他使用粗箭头从内部回调中维护自定义区域的上下文。因此,他能够在对话框close回调中调用区域上的close?如何在Javascript中实现这一点

这是我的自定义区域尝试,但在调用此.closeDialog()时失败,因为“this”指的是对话框而不是区域:

    var DialogRegion = Backbone.Marionette.Region.extend({

        onShow: function (view) {
            this.$el.dialog({
                modal: true,
                resizable: false,
                draggable: false,
                width: "600px",
                close: function (e, ui) {
                        this.closeDialog()//This doesn't work.  Wrong context.  Need outer DialogRegion context?                
                }
            })
        },        

        closeDialog: function () {
            this.close();
            this.$el.dialog("destroy");
        }

    }); 

如果您可以假设一个相当现代的JavaScript,那么您可以使用:

bind()
方法创建一个新函数,该函数在调用时将其this关键字设置为提供的值[…]

看起来是这样的:

close: function (e, ui) {
    this.closeDialog();
}.bind(this)
您使用的是木偶,所以您使用的是主干,这意味着下划线是可用的。这意味着,如果不想使用本机
绑定
,可以使用:

close: _(function (e, ui) {
    this.closeDialog();
}).bind(this)
您使用的是jQuery UI,因此也应该有可用的
$.proxy
\uu.bind
的作用相同,因此您可以使用它:

close: $.proxy(function(e, ui) {
    this.closeDialog();
}, this)
“经典”选项是评论中提到的选项:

onShow: function (view) {
    var _this = this;
    this.$el.dialog({
        //...
        close: function (e, ui) {
            _this.closeDialog()
        }
    });
}

这四个选项在功能上都相当于您在CoffeeScript视频中看到的
关闭:(e,ui)=>…

请参见
$。代理
?关于上述方法,你有什么想法?编辑:请参阅。所以最好使用本机或下划线
bind
@WilbertvandeRidder:对,我倾向于忘记
$.proxy
,因为我通常有下划线可用。您也可以使用
$.proxy
,但是
var\u this=this
方法在jQuery世界中似乎更为常见。非常好。有很多选择。多谢。第一个也是最后一个工作。当我有机会在这里时,我也会验证另外两个。根据我在你提供的链接上读到的内容,它们应该是有效的。