.create()和.createWithMixins()之间有什么区别?我无法找到有关这方面的任何文件.当我使用.create()创建一个视图实例,并在didInsertElement方法中调用this._super(),然后抛出以下错误:

Ember.Object.create no longer supports defining methods that call
_super.

但是,当我用.createWithMixins()替换.create()时,一切正常.这里是代码和示例js小提琴:

App.SampleView = Ember.View.create({
    sampleProperty : "a",didInsertElement : function(){
        this._super();
        this.set("sampleProperty","b");        
    } 
});

http://jsfiddle.net/bErRT/3/.

解决方法

从 Wikipedia:

In object-oriented programming languages,a mixin is a class,which
contains a combination of methods from other classes. How such
combination is done depends on language,but it is not by inheritance.
If a combination contains all methods of combined classes it is
equivalent to multiple inheritance.

在Ember的对象实例中,使用没有参数的create方法创建对象的实例,或者使用表示该类型的属性的单个哈希(kvo),并将自动填充它们.例:

var SomeClass = Ember.Object.extend({
    name: '',url: ''
});

// this instance will have a "name" and a "url" properties with blank values
var someInstance = SomeClass.create();

// this instance will have the same properties,but Now 
// their values will be populated
var anotherInstance = SomeClass.create({
    name: 'Ember.js',url: 'http://emberjs.com'
})

另一方面,crateWithMixins允许您将另一个类定义混合到单个对象实例或另一个类中.所以让我们说上面有一样的SomeClass,但是你不想通过扩展来创建另一个类.在这种情况下,您可以使用Mixin来确保只有一个实例将具有两个类的定义.例:

var SomeClass = Ember.Object.extend({
    name: '',url: ''
});

// note that you don't extend a mixin,you only create
var SomeOtherClass = Ember.Mixin.create({
    doSomething: function() {
        console.log('doing my thing');
    }
});

// This instance will have a method called "doSomething"
var x = SomeClass.createWithMixins(SomeOtherClass,{ 
    name: 'Ember.js',url: 'http://emberjs.com' 
});

// this instance only has methods/properties defined in "SomeClass"
// therefore,no method called "doSomething"
var y = SomeClass.create({ 
    name: 'Google',url: 'http://google.ca'
});

但是,如果要使用Mixin创建一个新类,可以扩展Em.Object,将Mixin作为第一个参数传递,如下所示:

var AnotherClass = Ember.Object.extend(SomeOtherClass,{
    firstName: '',lastName: ''
});

var z = AnotherClass.create();
z.set('firstName','Hiro');
z.set('lastName','Nakamura');
z.doSomething();

查看API Documentation以及JSFiddle.

编辑:对于_super(),只有在创建一个新类(通过扩展)时才使用这个.当您创建现有类的实例时,不应调用_super().

另一件事.我看到你正在尝试直接创建一个视图.我相信,根据您的代码,您应该扩展Ember.View,让框架在适当的时候为您创建实例.如果您手动创建,那么您将对其工作流程的某些部分负责,例如将其附加到DOM,删除它等.也许我看不到整个图片,但是基于这个代码,我认为你不应该调用create there并调用extend,然后你可以调用_super()

ember.js – ember中.create()和.createWithMixins()之间的区别的更多相关文章

  1. HTML5 播放 RTSP 视频的实例代码

    目前大多数网络摄像头都是通过 RTSP 协议传输视频流的,但是 HTML 并不标准支持 RTSP 流。本文重点给大家介绍HTML5 播放 RTSP 视频的实例代码,需要的朋友参考下吧

  2. 浅析HTML5中的download属性使用

    这篇文章主要介绍了浅析HTML5中的download属性使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  3. HTML5 Blob 实现文件下载功能的示例代码

    这篇文章主要介绍了HTML5 Blob 实现文件下载功能的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  4. web字体加载方案优化小结

    这篇文章主要介绍了web字体加载方案优化小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  5. ios – 在WKWebView中获取链接URL

    我想在WKWebView中获取tapped链接的url.链接采用自定义格式,可触发应用中的某些操作.例如HTTP://我的网站/帮助#深层链接对讲.我这样使用KVO:这在第一次点击链接时效果很好.但是,如果我连续两次点击相同的链接,它将不报告链接点击.是否有解决方法来解决这个问题,以便我可以检测每个点击并获取链接?任何关于这个的指针都会很棒!解决方法像这样更改addobserver在observeValue函数中,您可以获得两个值

  6. ios – 加载空白页面的SFSafariViewController

    我正在使用SFSafariViewController在我的iOS应用程序中打开一个URL..它在iOS9上完美运行但在将我的设备更新到iOS10后,它只是在地址栏中加载了一个没有URL的空白页面.甚至safariViewController(控制器:SFSafariViewController,didCompleteInitialLoaddidLoadSuccessfully:Bool)在控制器

  7. ios – 应用更新,NSURL和文档目录

    我应该存储相对图像网址或字符串来表示这些资源的位置,还是应该可以存储最终成为绝对网址的内容?

  8. ios – 从Facebook这样的任何URL获取特定图像

    我的问题看起来可能与其他问题类似,但事实并非如此.(据我所知).我无法理解如何从任何URL获取特定图像像Facebook一样,我无法向您显示屏幕截图,因为我没有真正的设备.但我可以告诉你Skype的屏幕截图来自MAC.任何帮助将不胜感激.thanks.编辑:我使用这个link获得了favicon,但它非常小我想要更大的尺寸.解决方法最后,我得到了答案.这可能对你有帮助,这就是为什么我发布这个答案.

  9. ios – 如何使用string中的参数创建Selector

    我正在使用Swift3.1和Xcode8.3.3编写程序.我想创建一个类,负责在键盘出现和消失时移动整个视图.但是我在使用字符串参数创建自定义选择器时遇到了困难.要显示或隐藏键盘我们需要功能:我正在尝试创建一个这样的选择器:它正在编译,但是当键盘出现时,它会崩溃.因为它是独立的类我不能使用这种结构:因为它将Swift函数转换为Objective-C函数.所以问题是:如何用参数字符串创建一个Selector表单?

  10. ios – 资产目录与文件夹参考:何时使用其中一个?

    我可以将文件放入Assets.xcassets,或者我可以将文件放入文件夹引用.我何时会选择一个而不是另一个?

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部