Просмотр исходного кода

fix expressions on repeated items

Evan You 12 лет назад
Родитель
Сommit
08ba942b88

+ 1 - 3
src/compiler.js

@@ -530,9 +530,7 @@ CompilerProto.markComputed = function (binding) {
         vm    = this.vm
     binding.isComputed = true
     // bind the accessors to the vm
-    if (binding.isFn) {
-        binding.value = utils.bind(value, vm)
-    } else {
+    if (!binding.isFn) {
         value.$get = utils.bind(value.$get, vm)
         if (value.$set) {
             value.$set = utils.bind(value.$set, vm)

+ 2 - 1
src/directives/on.js

@@ -29,6 +29,7 @@ module.exports = {
 
         var compiler = this.compiler,
             event    = this.arg,
+            isExp    = this.binding.isExp,
             ownerVM  = this.binding.compiler.vm
 
         if (compiler.repeat &&
@@ -51,7 +52,7 @@ module.exports = {
                 if (target) {
                     e.el = target
                     e.targetVM = target.vue_viewmodel
-                    handler.call(ownerVM, e)
+                    handler.call(isExp ? e.targetVM : ownerVM, e)
                 }
             }
             dHandler.event = event

+ 31 - 0
test/functional/fixtures/repeated-exp.html

@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <title>Repeated Expressions</title>
+        <meta charset="utf-8">
+        <script src="../../../dist/vue.js"></script>
+    </head>
+    <body>
+        <ul id="test">
+            <li
+                v-repeat="items"
+                v-on="click:n++"
+                class="item-{{$index}}"
+            >
+                {{n}}
+            </li>
+        </ul>
+        <script>
+            var app = new Vue({
+                el: '#test',
+                data: {
+                    items: [
+                        { n: 1 },
+                        { n: 2 },
+                        { n: 3 }
+                    ]
+                }
+            })
+        </script>
+    </body>
+</html>

+ 19 - 0
test/functional/specs/repeated-exp.js

@@ -0,0 +1,19 @@
+casper.test.begin('Repeated Expressions', 3, function (test) {
+    
+    casper
+    .start('./fixtures/repeated-exp.html')
+    .then(function () {
+        this.click('.item-0')
+        this.click('.item-1')
+        this.click('.item-2')
+    })
+    .then(function () {
+        test.assertSelectorHasText('.item-0', '2')
+        test.assertSelectorHasText('.item-1', '3')
+        test.assertSelectorHasText('.item-2', '4')
+    })
+    .run(function () {
+        test.done()
+    })
+
+})