Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Vue使用状态机解析path路径的疑问 #3

Closed
youngwind opened this issue Oct 1, 2016 · 2 comments
Closed

Vue使用状态机解析path路径的疑问 #3

youngwind opened this issue Oct 1, 2016 · 2 comments

Comments

@youngwind
Copy link

hi, banama:
我看了你的这篇文章,收获良多,谢谢!
但是,有一些地方我没有想明白。
1. 为什么Vue要使用状态机来解析path路径?
比如你在文章中举的例子

var a = {
    b: {
        c: {
            d: "e"
        }
    }
}
var path = "b.c.d"

如果仅仅是想得到path路径对应的值,那么直接根据path拼接一个新的Function不是一个更简单的方法吗?示意代码如下:

new Function(scope){
   return scope.b.c.d
}

这也是Vue源码中makeGetterFn函数所干的事情。

所以,使用状态机解析path有什么特别的优势吗?

2. 如何触发状态机
我自己做的例子是这样的:

<div id="demo">
    <p>{{user.info[1].name}}</p>
    <p>{{user.age}}</p>
</div>

但是发现整个程序执行下来,根本不会触发parse/path.js里面的parsePath函数,更加谈不上使用状态机解析path路径了。
相反,程序触发的是parse/expression.js里面的parseExpression函数

我想知道要**怎样编写demo才能触发parse/path.js里面的parsePath函数呢?**因为不触发它,我根本没有办法debug状态机这一部分的代码。

@banama
Copy link
Owner

banama commented Oct 17, 2016

不好意思,回复的有点晚。
1 直接根据path拼接一个新的Function是一个更简单的方法,但是这种方法只能取值,如makeGetterFn, parsePath主要用在compileSetter -> setPath -> parsePath
2 如1中所说的,parsePath 主要用在 compileSetter, 具体体现在双向绑定,比如`v-model` 指令,入口在这里

@youngwind
Copy link
Author

@banama 好的,我再去看一下,谢谢!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants