can-view-model
Advanced tools
Comparing version 3.3.0-pre.1 to 3.3.0-pre.2
var QUnit = require('steal-qunit'); | ||
var viewModel = require('can-view-model'); | ||
var SimpleMap = require('can-simple-map'); | ||
var CanMap = require('can-map'); | ||
var DefineMap = require("can-define/map/map"); | ||
var types = require('can-types'); | ||
@@ -29,1 +31,58 @@ | ||
}); | ||
QUnit.test('set custom can-simple-map on element (#5)', function(){ | ||
var vm, elVm; | ||
var CustomMap = SimpleMap.extend({}); | ||
var el = document.createElement('div'); | ||
document.getElementById('qunit-fixture').appendChild(el); | ||
vm = new CustomMap({ foo: 'bar' }); | ||
elVm = viewModel(el, vm); | ||
QUnit.equal(viewModel(el,'foo'), 'bar'); | ||
}); | ||
QUnit.test('set custom can-map on element (#5)', function(){ | ||
var vm, elVm; | ||
var CustomMap = CanMap.extend({}); | ||
var el = document.createElement('div'); | ||
document.getElementById('qunit-fixture').appendChild(el); | ||
vm = new CustomMap({ foo: 'bar' }); | ||
elVm = viewModel(el, vm); | ||
QUnit.equal(viewModel(el,'foo'), 'bar'); | ||
}); | ||
QUnit.test('set custom can-define-map on element (#5)', function(){ | ||
var vm, elVm; | ||
var CustomMap = DefineMap.extend({}); | ||
var el = document.createElement('div'); | ||
document.getElementById('qunit-fixture').appendChild(el); | ||
vm = new CustomMap({ foo: 'bar' }); | ||
elVm = viewModel(el, vm); | ||
QUnit.equal(viewModel(el,'foo'), 'bar'); | ||
}); | ||
QUnit.test('Allow passing array like (jQuery) element', function(){ | ||
var DefaultMap = types.DefaultMap; | ||
var $el = {}; | ||
types.DefaultMap = undefined; | ||
var el = document.createElement('div'); | ||
el.className = 'the-el'; | ||
$el[0] = el; | ||
$el.length = 1; | ||
document.getElementById('qunit-fixture').appendChild(el); | ||
viewModel($el, 'foo', 'bar'); | ||
QUnit.equal(viewModel('.the-el', 'foo'), 'bar', 'It reads view scope from html element'); | ||
QUnit.equal(viewModel($el, 'foo'), 'bar', 'It reads view scope from array like (jQuery) element'); | ||
QUnit.ok(viewModel(el) instanceof SimpleMap, 'is can-map'); | ||
types.DefaultMap = DefaultMap; | ||
}); | ||
QUnit.test('elements with length property not treated as arraylikes (#31)', function() { | ||
var el = document.createElement('select'); | ||
document.getElementById('qunit-fixture').appendChild(el); | ||
QUnit.equal(el.length, 0, "Select has length property (0 for empty)"); | ||
QUnit.deepEqual(viewModel(el).get(), {}, "viewModel created on empty select"); | ||
var opt = document.createElement('option'); | ||
el.appendChild(opt); | ||
QUnit.equal(el.length, 1, "Select has length 1"); | ||
QUnit.deepEqual(viewModel(el).get(), {}, "viewModel created on non-empty select"); | ||
}); |
@@ -7,7 +7,16 @@ "use strict"; | ||
var getDocument = require("can-util/dom/document/document"); | ||
var isArrayLike = require('can-util/js/is-array-like/is-array-like'); | ||
module.exports = ns.viewModel = function (el, attr, val) { | ||
el = typeof el === 'string' ? getDocument().querySelector(el) : el; | ||
var scope ; | ||
if (typeof el === 'string') { | ||
el = getDocument().querySelector(el); | ||
} else if (isArrayLike(el) && !el.nodeType) { | ||
el= el[0]; | ||
} | ||
var scope = domData.get.call(el, "viewModel"); | ||
if (types.isMapLike(attr)) { | ||
return domData.set.call( el, "viewModel", attr); | ||
} | ||
scope = domData.get.call(el, "viewModel"); | ||
if(!scope) { | ||
@@ -14,0 +23,0 @@ scope = types.DefaultMap ? new types.DefaultMap() : new SimpleMap(); |
{ | ||
"name": "can-view-model", | ||
"version": "3.3.0-pre.1", | ||
"version": "3.3.0-pre.2", | ||
"description": "gets or sets the view model of an element", | ||
@@ -38,5 +38,5 @@ "homepage": "http://canjs.com", | ||
"devDependencies": { | ||
"bit-docs": "0.0.7", | ||
"can-define": "^1.2.0-pre.1", | ||
"can-map": "^3.1.0-pre.2", | ||
"bit-docs": "0.0.7", | ||
"done-serve": "^0.2.0", | ||
@@ -43,0 +43,0 @@ "donejs-cli": "^0.9.5", |
13366
132