DoneJS StealJS jQuery ++ FuncUnit DocumentJS
3.0.0
2.3.27

 

  • Github
  • Twitter
  • Chat
  • Forum
  • Guides
  • Core
    • can-component
    • can-compute
    • can-connect
    • can-define
    • can-define/list/list
    • can-define/map/map
    • can-route
    • can-route-pushstate
    • can-set
    • can-stache
      • Pages
        • Magic Tag Types
        • Scope and Context
        • Expressions
        • Template Acquisition
        • Helpers
        • Live Binding
      • Methods
        • from
        • registerConverter
        • registerHelper
        • registerPartial
        • registerSimpleHelper
        • safeString
      • Tags
        • {{expression}}
        • {{{expression}}}
        • {{#expression}}
        • {{/expression}}
        • {{^expression}}
        • {{>key}}
        • {{!expression}}
        • {{else}}
      • Expressions
        • Bracket Expression
        • Call Expression
        • Hash Expression
        • Helper Expression
        • KeyLookup Expression
        • Literal Expression
      • Key Operators
        • @at
        • ~compute
        • ./current
        • ../parent
        • %special
        • this
        • *variable
        • key
      • Helpers
        • {{#if expression}}
        • {{#unless expression}}
        • {{#each expression}}
        • {{#with expression}}
        • {{log}}
        • {{#is expressions}}
        • {{#switch expression}}
        • {{#case expression}}
        • {{#default}}
        • {{joinBase expressions}}
      • Types
        • getterSetter
        • helper
        • helperOptions
        • renderer
        • sectionRenderer
        • simpleHelper
    • can-stache/helpers/route
    • can-stache-bindings
  • Ecosystem
  • Infrastructure
  • Legacy
  • Bitovi
    • Bitovi.com
    • Blog
    • Consulting
    • Training
    • Open Source
  • Chat
  • Forum
  • Star
  • Follow @canjs
  • CanJS
  • /
  • Core
  • /
  • can-stache
  • /
  • KeyLookup Expression
  • / On this page
    • KeyLookup Expression

      typedef
      • source

      key

      A KeyLookup expression specifies a value in the scope or HelperOptions scope that will be looked up. KeyLookup expressions can be the entire stache expression like:

      {{key}}
      

      Or they can makeup the method, helper, arguments and hash value parts of Call Expression, Helper Expression, and Hash Expressions:

      {{method(arg1,arg2}}          Call
      {{helper arg1 arg2}}          Helper
      {{method( prop=hashValue )}}  Hash
      

      CALL_EXPRESSION.key

      Looks up key on the return value of CALL_EXPRESSION.

      {{#each Todo.getList(complete=completed).value}}
      

      Parameters

      1. CALL_EXPRESSION {Call Expression}:

        A call expression that may or may not return a value.

      2. key {String}:

        A property value to look up on the result of CALL_EXPRESSION.

      Use

      The value returned up by a KeyLookup depends on what the key looks like, and what expression type the KeyLookup is within.

      For example, {{method(~./key)}} will call method with a compute that looks up the value of key only in the top of the scope.

      The rules are as follows:

      • Call Expression arguments {{method(key)}} - values are passed.
      • Helper Expression arguments {{helper key}} - computes are passed.
      • hash value in Call Expression {{method(hash=key)}} - values are set as property values.
      • hash value in Helper Expression {{method hash=key}} - computes are set as property values.
      • special operator {{%index}} - lookup values in a special context provided by some helpers.
      • compute operator {{method(~key)}} - pass a compute instead of a value.
      • at operator {{method(@key}} - pass a function instead of trying to read the value of the function.
      • current operator {{./key}} - only lookup key at the top of the scope.
      • parent operator {{../key}} - lookup the value in the parent context.
      • context key {{this}} - return the current context/top of the scope.

      Default key return values by expression and data types

      Keys can have slightly different default behavior depending if they are used in:

      • helper arguments like: {{helper some.key}}

      when compared to the other places they are used:

      • insertion tags like: {{some.key}}
      • call-expression arguments like: {{helper(some.key)}}
      • event bindings like: ($click)="method(some.key)"
      • data bindings like: {some-attr}="some.key"

      Furthermore keys return different values depending on the data type.

      In general:

      • Functions are called to get their return value. (Use the @ operator to prevent this).
      • Keys in helper expression arguments that find observable data return a compute that represents the value.
      • Keys in other expressions return the value.
      • If no observable data is found, the key's value is returned in all expressions.

      The following illustrates what some.key would return given different data structures as a Helper Expression and in all other expressions.

      // A non-observable JS object:
      {some: {key: "value"}};
         // Helper -> "value"
         // Other  -> "value"
      
      // A non-observable JS object w/ a function at the end
      {some: {key: function(){ return "value"; }}}
         // Helper -> "value"
         // Other  -> "value"
      
      // A non-observable JS object with intermeidate functions:
      {some: function(){ return {key: "value"}}}
         // Helper -> "value"
         // Other  -> "value"
      
      // A observable can-map
      {some: new Map({key: "value"})}
         // Helper -> canCompute("value")
         // Other  -> "value"
      
      // A method on an observable can-map that reads observables
      var Some = Map.extend({key: function(){ return this.attr("value")}})
      {some: new Some({value: "value"})}
         // Helper -> canCompute("value")
         // Other  -> "value"
      

      CanJS is part of DoneJS. Created and maintained by the core DoneJS team and Bitovi. Currently 3.0.0.