日期:2014-05-16  浏览次数:20371 次

JavaScriptMVC之语言助手


在这篇文章,我只挑了有用的语言助手来讲解,其它没有讲到的,大家可以去查看JavaScriptMVC的帮助文档。

注:下述功能需要引入对应的jquery/language文件夹下的插件才能使用。

1、对象的比较

$.Object.same:比较2个对象是否一样。

很难用文字去描述这个函数,我们直接来看例子可以更好理解:

$.Object.same({name: "Justin"},
              {name: "JUSTIN"}) //-> false

// {name:null} 表示比较这2个对象时忽略name这个属性
$.Object.same({name: "Brian"},
              {name: "JUSTIN"},
              {name: null})      //-> true

// {name:i} 表示忽略这个name属性的值
$.Object.same({name: "Justin"},
              {name: "JUSTIN"},
              {name: "i"})      //-> true

// deep rule
$.Object.same({ person : { name: "Justin" } },
              { person : { name: "JUSTIN" } },
              { person : { name: "i"      } }) //-> true

// 支持使用一样函数来做为比较器
$.Object.same({age: "Thirty"},
              {age: 30},
              {age: function( a, b ){
                      if( a == "Thirty" ) {
                        a = 30
                      }
                      if( b == "Thirty" ) {
                        b = 30
                      }
                      return a === b;
                    }})      //-> true
?




2、观察模式

我们可以实现数据属性值变化监听,那么只需要把原始数据变成观察对象即可。
这是在这里我们使用的$.Observe。

观察对象给JavaScript对象和数组提供了观察者模式的功能。

具有以下功能:
1、在对象和数组中设置和删除属性或者属性值
2、监听对象和数组的变化
3、属性嵌套也可以使用

创建一个观察对象

创建一个观察对象,或者观察数组,最简单的方式就是使用$.O(data)快捷方式:

var person = $.O({name: 'justin', age: 29}),
    hobbies = $.O(['programming', 'basketball', 'nose picking'])
?



依赖数据通过$.O,它将创建一个实例:

1、观察对象,只需要传递一个对象进来,例如:{foo: 'bar'}
2、观察数组,只需要传递一个数组进来,例如:['foo','bar']

观察数组和观察对象是非常相似的。事实上,观察数组是继承于观察对象,而且它只是添加了一个数组操作的额外方法。
你也可以通过创建一个新的简单观察对象:

var data = {
  addresses : [
    {
      city: 'Chicago',
      state: 'IL'
    },
    {
      city: 'Boston',
      state : 'MA'
    }
    ],
  name : "Justin Meyer"
},
o = new $.Observe(data);
?



获取和设置属性值

使用attr和attrs来获取和设置属性值。

例如,你可以通过observe.attr(name)来读取这个属性的值:

// read name
o.attr('name') //-> Justin Meyer
?


?
?
通过observe.attr(name,value)来设置这个属性的值:

// update name
o.attr('name', "Brian Moschel") //-> o
?


?

观察都还可以处理嵌套数据。嵌套对象和数组可以通过$.Observe和$.Observe.List来转换。 这让你可以使用$.Observe的方法来读取嵌套属性。下述是更新第2个地址为'New York':

o.attr('addresses.1').attrs({
  city: 'New York',
  state: 'NY'
})
?



通过使用attrs()方法可以从观察对象中读取到所有属性。

o.attrs() // ->
{
  addresses : [
    {
      city: 'Chicago',
      state: 'IL'
    },
    {
      city: 'New York',
      state : 'MA'
    }
  ],
  name : "Brian Moschel"
}
?


监听属性值的变化

当一个属性值变化后,你能监听到它产生的事件。这里是通过2种方式去监听事件:

1、bind 监听所有变化

2、delegate 监听指定的变化

注:如果看过《JavaScriptMVC之控制器监听事件》,就会记得里面有一个叫手动绑定,也是使用这2种方式。

使用bind("change",handler(ev,attr,how,newVal,oldVal)),你可以监听到这个观察对象的任何变化产生。
下述这个句柄监听属性name的变化,how是变化['add','remove','set'], the new value and the old value.

o.bind('change', function( ev, attr, how, nevVal, oldVal ) {

}) 
?



delegate(attr,event,handler(ev,newVal,oldVal))监听一个指定属性的指定事件产生。

// listen for name changes
o.delegate("name","set", function(){

}) 
?


?

Delete让你通过匹配来监听指定多个属性和值的变化。

例如

r = $.O({type: "video", id : 5})
r.delegate("type=images id","set", function(){})
?



3、字符串操作

在开发中我们遇到字符串的操作肯定会很多,在这里我们把4个有用的字符串操作讲解。

$.String.deparam() 把字符串变成对象

$.String.deparam("foo=bar&person[age]=3