DoneJS StealJS jQuery++ FuncUnit DocumentJS
3.14.1
5.0.0 4.3.0 2.3.35
  • About
  • Guides
  • API Docs
  • Community
  • Contributing
  • Bitovi
    • Bitovi.com
    • Blog
    • Design
    • Development
    • Training
    • Open Source
    • About
    • Contact Us
  • About
  • Guides
  • API Docs
    • Observables
      • can-compute
      • can-define
      • can-define/list/list
      • can-define/map/map
      • can-define-stream
      • can-define-stream-kefir
      • can-event
      • can-event/async/async
      • can-event/batch/batch
      • can-event/lifecycle/lifecycle
      • can-kefir
      • can-list
      • can-map
      • can-map-backup
      • can-map-define
      • can-observation
      • can-observe
      • can-simple-map
      • can-simple-observable
      • can-stream
      • can-stream-kefir
    • Data Modeling
      • can-connect
      • can-connect-cloneable
      • can-connect-feathers
      • can-connect-ndjson
      • can-connect-signalr
      • can-fixture
      • can-fixture-socket
      • can-ndjson-stream
      • can-set
    • Views
      • can-component
        • static
          • extend
        • prototype
          • ViewModel
          • events
          • helpers
          • leakScope
          • tag
          • view
          • viewModel
        • elements
          • <can-slot>
          • <can-template>
          • <content>
        • special events
          • beforeremove
      • can-ejs
      • can-element
      • can-react-component
      • can-stache
      • can-stache/helpers/route
      • can-stache-bindings
      • can-stache-converters
      • can-view-autorender
      • can-view-callbacks
      • can-view-href
      • can-view-import
      • can-view-live
      • can-view-model
      • can-view-nodelist
      • can-view-parser
      • can-view-scope
      • can-view-target
      • react-view-model
      • react-view-model/component
      • steal-stache
    • Routing
      • can-deparam
      • can-param
      • can-route
      • can-route-pushstate
    • JS Utilities
      • can-assign
      • can-define-lazy-value
      • can-globals
      • can-key-tree
      • can-make-map
      • can-parse-uri
      • can-string
      • can-string-to-any
      • can-util
      • can-zone
      • can-zone-storage
    • DOM Utilities
      • can-ajax
      • can-attribute-encoder
      • can-control
      • can-dom-events
      • can-event-dom-enter
      • can-event-dom-radiochange
      • can-jquery
    • Data Validation
      • can-define-validate-validatejs
      • can-validate
      • can-validate-interface
      • can-validate-legacy
      • can-validate-validatejs
    • Typed Data
      • can-cid
      • can-construct
      • can-construct-super
      • can-namespace
      • can-reflect
      • can-reflect-promise
      • can-types
    • Polyfills
      • can-symbol
      • can-vdom
    • Core
    • Infrastructure
      • can-global
      • can-test-helpers
    • Ecosystem
    • Legacy
  • Community
  • Contributing
  • GitHub
  • Twitter
  • Chat
  • Forum
  • News
Bitovi

leakScope

  • Edit on GitHub

Allow reading the outer scope values from a component’s view and a component’s viewModel values in the user content.

Boolean

false limits reading to:

  • the component’s viewModel from the component’s view, and
  • the outer scope values from the user content.

true adds the ability to read:

  • the outer scope values from the component’s view, and
  • the component’s ViewModel values from the user content.

The default value is false.

To change leakScope from the default:

Component.extend({
    tag: "my-component",
    leakScope: true,
    ViewModel: { message: "Hello World!" },
    view: stache("{{message}}")
})

Leaving leakScope as the default false is useful for hiding and protecting internal details of Component, potentially preventing accidental clashes. It can be helpful to set it to true if you, for example, wanted to customize user content based on some value in the component’s ViewModel.

Use

A component’s leakScope option controls if a component’s view can access the component’s outer scope and the user content can read the component’s view model.

Let’s define what outer scope, component’s view and user content mean.

If I have a <hello-world> component in a view like:

{{#data}}
    <hello-world>{{subject}}</hello-world>
{{/data}}

The outer scope of <hello-world> has data as its context. The user content of <hello-world> is the view between its tags. In this case, the user content is {{subject}}.

Finally, if <hello-world> is defined like:

Component.extend({
  tag: "hello-world",
  view: stache("{{greeting}} <content/>{{exclamation}}")
})

{{greeting}} <content/>{{exclamation}} represents the component’s view.

Using outer scope in component view

If leakScope is true, the component’s view can read the data in the outer scope and will see name: "John" overwriting name: "World" in the component’s viewModel instance in the following example.

If the following component is defined:

Component.extend({
    tag: 'hello-world',
    leakScope: true, // changed to true instead of the default value
    ViewModel: {name: "World"},
    view: stache("Hello {{name}}")
});

With this data in the outer scope:

{ name: "John" }

And used like so:

<hello-world />

If leakScope is true it will render:

<hello-world>Hello John</hello-world>

If leakScope is false it will render:

<hello-world>Hello World</hello-world>

Using viewModel in user content

if leakScope is true, the user content is able to see the name property on the component’s viewModel instance in the following example. Else, name won't be seen.

If the following component is defined:

Component.extend({
    tag: 'hello-world',
    leakScope: true, // changed to true instead of the default value
    ViewModel: {name: "World"},
    view: stache("Hello <content />")
});

And used like so:

<hello-world>{{name}}</hello-world>

If leakScope is true it will render:

<hello-world>Hello World</hello-world>

If leakScope is false it will render:

<hello-world>Hello </hello-world>

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

On this page

Get help

  • Chat with us
  • File an issue
  • Ask questions
  • Read latest news