DoneJS StealJS jQuery ++ FuncUnit DocumentJS
3.0.0
2.3.27

 

  • Github
  • Twitter
  • Chat
  • Forum
  • Guides
  • Core
  • Ecosystem
  • Infrastructure
  • Legacy
    • can-ejs
    • can-list
      • Prototype
        • attr
        • each
        • filter
        • map
        • reverse
        • splice
      • Static
        • Map
        • extend
    • can-map
    • can-map-backup
    • can-map-define
    • can-view-href
  • Bitovi
    • Bitovi.com
    • Blog
    • Consulting
    • Training
    • Open Source
  • Chat
  • Forum
  • Star
  • Follow @canjs
  • CanJS
  • /
  • Legacy
  • /
  • can-list
  • / On this page
    • can-list

      module
      • npm package badge
      • Star
      • source

      new List([array])

      Create an observable array-like object.

      Parameters

      1. array {Array}:

        Items to seed the List with.

      Returns

      {can-list}:

      An instance of List with the elements from array.

      new List(deferred)

      Parameters

      1. deferred {can.Deferred}:

        A deferred that resolves to an array. When the deferred resolves, its values will be added to the list.

      Returns

      {can-list}:

      An initially empty List.

      Use for observable array-like objects.

      Use

      List is used to observe changes to an Array. List extends can-map, so all the ways that you're used to working with Maps also work here.

      Use attr to read and write properties of a list:

      var hobbies = new List(["JS","Party Rocking"])
      hobbies.attr(0)        //-> "JS"
      hobbies.attr("length") //-> 2
      
      hobbies.attr(0,"JavaScript")
      
      hobbies.attr()         //-> ["JavaScript","Party Rocking"]
      

      Just as you shouldn't set properties of an Map directly, you shouldn't change elements of a List directly. Always use attr to set the elements of a List, or use [can-list::push push], [can-list::pop pop], [can-list::shift shift], [can-list::unshift unshift], or splice.

      Here is a tour through the forms of List's attr that parallels the one found under attr:

      var people = new List(['Alex', 'Bill']);
      
      // set an element:
      people.attr(0, 'Adam');
      people[0] = 'Adam'; // don't do this!
      
      // get an element:
      people.attr(0); // 'Adam'
      people[0]; // 'Adam'
      
      // get all elements:
      people.attr(); // ['Adam', 'Bill']
      
      // extend the array:
      people.attr(4, 'Charlie');
      people.attr(); // ['Adam', 'Bill', undefined, undefined, 'Charlie']
      
      // merge the elements:
      people.attr(['Alice', 'Bob', 'Eve']);
      people.attr(); // ['Alice', 'Bob', 'Eve', undefined, 'Charlie']
      

      Listening to changes

      As with Maps, the real power of observable arrays comes from being able to react to changes in the member elements of the array. Lists emit five types of events:

      • the change event fires on every change to a List.
      • the set event is fired when an element is set.
      • the add event is fired when an element is added to the List.
      • the remove event is fired when an element is removed from the List.
      • the length event is fired when the length of the List changes.

      This example presents a brief concrete survey of the times these events are fired:

      var list = new List(['Alice', 'Bob', 'Eve']);
      
      list.bind('change', function() { console.log('An element changed.'); });
      list.bind('set', function() { console.log('An element was set.'); });
      list.bind('add', function() { console.log('An element was added.'); });
      list.bind('remove', function() {
        console.log('An element was removed.');
      });
      list.bind('length', function() {
        console.log('The length of the list changed.');
      });
      
      list.attr(0, 'Alexis'); // 'An element changed.'
                              // 'An element was set.'
      
      list.attr(3, 'Xerxes'); // 'An element changed.'
                              // 'An element was added.'
                              // 'The length of the list was changed.'
      
      list.attr(['Adam', 'Bill']); // 'An element changed.'
                                   // 'An element was set.'
                                   // 'An element was changed.'
                                   // 'An element was set.'
      
      list.pop(); // 'An element changed.'
                  // 'An element was removed.'
                  // 'The length of the list was changed.'
      

      More information about binding to these events can be found under attr.

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