enyo官方开发入门教程翻译一Key Concepts之Published Properties
2013-01-09 21:14
591 查看
Published Properties
enyo.Object
enyo.Object实现了enyo框架属性的公共方法(前面有一篇简单介绍enyo.Object类源码的博客)。published属性定义在enyo.kind内部的published 表中。所有声明为published的属性都自动添加了get和set方法。Published属性的set方法都会触发<propertyName>Changed的可选方法。
在下面的例子中,myValue成为“MyObject”原型的常规属性,并继承了set方法:
执行下面的代码:
只有当给该属性附一个不同与原值的值时才会调用changed方法。
Published属性作为常规属性存储在object原型中,可以直接索引或设置他们的值:
var x = myobj.myValue;
注意当直接设置属性的值时,并不会调用属性的changed方法。
Object and Array Values
在大多数情况下,published属性应该包含基本的值,如数字或字符串。如果你使用数组或object对象作为属性,检测属性变化的机制会失效。这是因为只有改变最外层的对象时JavaScript才会进行对比。一个getProperty方法返回一个object对象或一个指向内部的数组,如果你后来修改了这个object或者数组,那你就修改了kingd实例内部相同的object实例。
你可以通过重写enyo使用的getProperty方法来解决这个问题,如使用enyo.clone方法来做一个object或array的浅拷贝。然后,如果你把那个object传递给setProperty,它不会被当做是内部的属性,因为在内存中它是另外一个的object。然而即使两个objects拥有相同的内容当调用propertyChanged时你也会面临新的问题。
enyo.Object
enyo.Object实现了enyo框架属性的公共方法(前面有一篇简单介绍enyo.Object类源码的博客)。published属性定义在enyo.kind内部的published 表中。所有声明为published的属性都自动添加了get和set方法。Published属性的set方法都会触发<propertyName>Changed的可选方法。
在下面的例子中,myValue成为“MyObject”原型的常规属性,并继承了set方法:
enyo.kind({ name: "MyObject", kind: enyo.Object, // declare 'published' properties published: { myValue: 3 }, // These methods will be automatically generated: // getMyValue: function() ... // setMyValue: function(inValue) ... // optional method that is called whenever setMyValue is called myValueChanged: function(inOldValue) { this.delta = this.myValue - inOldValue; } });
执行下面的代码:
myobj = new MyObject(); var x = myobj.getMyValue(); // x gets 3 myobj.setMyValue(7); // myValue becomes 7; myValueChanged side-effect sets delta to 4
只有当给该属性附一个不同与原值的值时才会调用changed方法。
Published属性作为常规属性存储在object原型中,可以直接索引或设置他们的值:
var x = myobj.myValue;
注意当直接设置属性的值时,并不会调用属性的changed方法。
Object and Array Values
在大多数情况下,published属性应该包含基本的值,如数字或字符串。如果你使用数组或object对象作为属性,检测属性变化的机制会失效。这是因为只有改变最外层的对象时JavaScript才会进行对比。一个getProperty方法返回一个object对象或一个指向内部的数组,如果你后来修改了这个object或者数组,那你就修改了kingd实例内部相同的object实例。
你可以通过重写enyo使用的getProperty方法来解决这个问题,如使用enyo.clone方法来做一个object或array的浅拷贝。然后,如果你把那个object传递给setProperty,它不会被当做是内部的属性,因为在内存中它是另外一个的object。然而即使两个objects拥有相同的内容当调用propertyChanged时你也会面临新的问题。
相关文章推荐
- enyo官方开发入门教程翻译一Key Concepts之Creating Control
- enyo官方开发入门教程翻译一Key Concepts之Object Lifecycle
- enyo官方开发入门教程翻译一Key Concepts之Event Handling
- enyo官方开发入门教程翻译一Key Concepts之Creating Components
- enyo官方开发入门教程翻译一Key Concepts之Creating Kinds
- enyo官方开发入门教程翻译一Layout之Fittables
- enyo官方开发入门教程翻译一Layout之Panels
- enyo官方开发入门教程翻译一Getting Started之Starting Enyo App Development
- enyo官方开发入门教程翻译一Consuming Web Services
- enyo官方开发入门教程翻译一Layout之Drawers
- enyo官方开发入门教程翻译一Tutorials之Part1:Enyo(转载)
- enyo官方开发入门教程翻译一Getting Started之A Tour of Enyo
- enyo官方开发入门教程翻译一Layout之Scrollers
- enyo官方开发入门教程翻译一Tutorials之Part2:Onyx and Layout(转载)
- enyo官方开发入门教程翻译一User Input
- enyo官方开发入门教程翻译一Controls之Buttons
- enyo官方开发入门教程翻译一Layout之Lists
- Apple官方IOS开发入门教程[v0.2]
- Direct9入门教程|Direct9官方提供的tutorial文件自己翻译的|DirectX创建设备
- Swift官方入门教程系列--二--storyboard与代码的交互【翻译版,源代码】