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

stricter check for computed properties

Evan You 13 лет назад
Родитель
Сommit
5bfb4b5ef2
3 измененных файлов с 11 добавлено и 8 удалено
  1. 4 4
      examples/todomvc/index.html
  2. 2 2
      examples/todomvc/js/app.js
  3. 5 2
      src/binding.js

+ 4 - 4
examples/todomvc/index.html

@@ -28,7 +28,7 @@
                     <li
                         class="todo"
                         sd-each="todo:todos"
-                        sd-show="filterTodo"
+                        sd-show="todoFiltered"
                         sd-class="completed:todo.completed, editing:todo.editing"
                     >
                         <div class="view">
@@ -56,9 +56,9 @@
                     <strong sd-text="remaining"></strong> {{remaining | pluralize item}} left
                 </span>
                 <ul id="filters">
-                    <li><a href="#/all" sd-class="selected:checkFilter">All</a></li>
-                    <li><a href="#/active" sd-class="selected:checkFilter">Active</a></li>
-                    <li><a href="#/completed" sd-class="selected:checkFilter">Completed</a></li>
+                    <li><a href="#/all" sd-class="selected:filterSelected">All</a></li>
+                    <li><a href="#/active" sd-class="selected:filterSelected">Active</a></li>
+                    <li><a href="#/completed" sd-class="selected:filterSelected">Completed</a></li>
                 </ul>
                 <button id="clear-completed" sd-on="click:removeCompleted" sd-show="completed">
                     Remove Completed ({{completed}})

+ 2 - 2
examples/todomvc/js/app.js

@@ -16,12 +16,12 @@ Seed.controller('todos', function (scope) {
     }}
 
     // dynamic context computed property using info from target scope
-    scope.filterTodo = {get: function (ctx) {
+    scope.todoFiltered = {get: function (ctx) {
         return filters[scope.filter](ctx.scope.completed)
     }}
 
     // dynamic context computed property using info from target element
-    scope.checkFilter = {get: function (ctx) {
+    scope.filterSelected = {get: function (ctx) {
         return scope.filter === ctx.el.textContent.toLowerCase()
     }}
 

+ 5 - 2
src/binding.js

@@ -31,8 +31,11 @@ BindingProto.inspect = function (value) {
         self = this
     // preprocess the value depending on its type
     if (type === 'Object') {
-        if (value.get || value.set) { // computed property
-            self.isComputed = true
+        if (value.get) {
+            var l = Object.keys(value).length
+            if (l === 1 || (l === 2 && value.set)) {
+                self.isComputed = true // computed property
+            }
         }
     } else if (type === 'Array') {
         utils.watchArray(value)