avalonJS中this使用的注意事项

this指针一般是基于宿主环境而存在的一个变量,一般是指向宿主对象,而对于MVVM框架来说,一方面需要在VM中创建对自身对象的操作,同时也可以在V(view)中使用到VM中定义到的方法,以下代码帮助理解:

//JS 模型

var vm = avalon.define({

  $id:‘vmID‘,

  $getData: function(){

    console.log(this); // this指针的指向因着调用位置的不确定而不确定
  }

})

avalon.ready(function(){

  vm.$getData();

})

// DOM结构

<div ms-controller="vmID">

  <a href="javascript:void(0);" ms-click="$getData()">获取数据</a>

</div>

  这样一来,对于方法在VM模型中使用打印的便是VM对象,而对于在DOM节点中使用的模型对象方法调用时,打印的便是DOM节点对象,给予此在MVVM框架中使用this指针时务必要小心。

解决方案可以是,不要直接使用VM对象中的$getData()方法,而是重新定义一个方法:

//JS 模型

var vm = avalon.define({

  $id:‘vmID‘,

  $getData: function(){

    console.log(this);  //this指针的指向不确定
  },
  $jump: function(){
    console.log(this);  //this指针指向DOM节点对象
    vm.$getData();  //vm指向模型对象
  }

})

avalon.ready(function(){

  vm.$getData();

})

// DOM结构

<div ms-controller="vmID">

  <a href="javascript:void(0);" ms-click="$jump()">获取数据</a>

</div>
时间: 2024-10-18 11:25:31

avalonJS中this使用的注意事项的相关文章

在ASP.NET MVC5 中使用 FormsAuthenticationTicket 的注意事项

在根目录 web.confgi文件中添加如下配置信息. <configuration> <system.web> <authentication mode="Forms"> <forms loginUrl="~/Account/LogOn" timeout="2880" /> </authentication> </system.web> </configuration

DB2中使用游标的注意事项

1. commit和rollback操作会让游标close掉,除非open的时候使用hold方式打开和使用游标 2. close掉cursor之后不用free cursor,但是close allcator之后要记得free allocator DB2中使用游标的注意事项

【编程开发】C语言中随机数rand使用注意事项

[编程开发]C语言中随机数rand使用注意事项 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:随机数在编程开发中非常重要,以C语言中的rand函数为例,使用时需要注意随机数的随机体现在哪里,比如是程序在不同的时刻执行时,相同位置的随机数是否需要一样,还是要每次执行生成的随机数也要不一样,等等,这些都是需要加以关注的地方. 经测试,发现,在不使用srand这个随机数种子的情况下:每次运行生成的随机数都是一样的.有的时候是需要这样子的,当然可以直接使

【转】vector中erase()的使用注意事项

vector::erase():从指定容器删除指定位置的元素或某段范围内的元素 vector::erase()方法有两种重载形式 如下: iterator erase(   iterator _Where); iterator erase(   iterator _First,   iterator _Last); 如果是删除指定位置的元素时: 返回值是一个迭代器,指向删除元素下一个元素; 如果是删除某范围内的元素时:返回值也表示一个迭代器,指向最后一个删除元素的下一个元素; 看下面的程序,目的

avalonjs 中的if else实现的几种方法

在学习avalonjs的过程中,发现模板中并没有if else这样的写法,不像tempalte ejs这些,所以总结了三种方法来实现,仅供在使用avalonjs的同学参考,主要是通过ms-if 表达式和方法来实现. 1.开始前的准备 首先是做一个简单的html作为基础 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; ch

在Pages中使用MathType的注意事项

虽然MathType这款数学公式编辑器软件能够与Pages等办公软件能够像与Office一样完美兼容,但在操作上仍然有些不同,尤其是在Pages中编辑MathType公式时还是有很多需要我们去注意一些操作事项. 若有疑问可直接访问:http://www.mathtype.cn/mac/bianji-zhuyi.html 将IOS Keynote中的公式后粘贴到Pages中后调节公式的位置       如果你从IOS的Keynote中将粘贴公式到Pages中,一旦你在苹果操作系统的Pages中打开

PHP开发中需要注意几点事项,新手少走弯路必备知识

这篇文章主要介绍了PHP开发需要注意的几点事项总结,非常详细,需要的朋友可以参考下.新手多看看避免走弯路. 1.使用内嵌的HTML代码,而不是PHP的echo语句. 因为PHP是一门嵌入式Web编程语言,可以将HTML代码和PHP代码相互嵌入.但是很多程序员担心在HTML代码中过多的使用""嵌入PHP代码会多次调用PHP解释器,从而降低了PHP代码的运行速度,所以宁愿使用PHP的echo语句来输出HTML代码,而不直接使用HTML代码.但事实却恰恰相反.每一个PHP页面只调用一次PHP

Django中的日期处理注意事项和自定义时间格式转换

我们在用Django创建models时,常常会涉及时间日期字段的处理,Django里日期相关Field有DateTimeField.DateField和TimeField三种类型,看似简单,但其中有一些容易出错的地方需要注意:另外,如果不习惯Django的默认时间格式,也可以自定义的修改. DateTimeField.DateField和TimeField,其值分别对应着Python里的datetime.datetime.datetime.date和datetime.time三个实例,这三个Fi

[转]PCB 设计中敷铜的注意事项

所谓覆铜,就是将 PCB 上闲置的空间作为基准面,然后用固体铜填充,这些铜区又称为灌铜.敷铜的意义在于:减小地线阻抗,提高抗干扰能力:降低压降,提高电源效率:与地线相连,还可以减小环路面积.也出于让 PCB 焊接时尽可能不变形的目的,大部分 PCB 生产厂家也会要求 PCB 设计者在 PCB 的空旷区域填充铜皮或者网格状的地线,敷铜如果处理的不当,那将得不赏失,究竟敷铜是"利大于弊"还是"弊大于利"? 大家都知道在高频情况下,印刷电路板上的布线的分布电容会起作用,当