From 316fd9536dbfa8d043f3cb238e4a0c5909cf8b74 Mon Sep 17 00:00:00 2001 From: cherif BOUCHELAGHEM Date: Fri, 3 Feb 2017 16:20:12 +0100 Subject: [PATCH 1/2] fix set custom map on element with SimpleMap --- can-view-model.js | 7 ++++++- can-view-model_test.js | 10 ++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/can-view-model.js b/can-view-model.js index ece7d2f..39525df 100644 --- a/can-view-model.js +++ b/can-view-model.js @@ -6,9 +6,14 @@ var ns = require("can-namespace"); var getDocument = require("can-util/dom/document/document"); module.exports = ns.viewModel = function (el, attr, val) { + var scope ; el = typeof el === 'string' ? getDocument().querySelector(el) : el; - 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) { scope = types.DefaultMap ? new types.DefaultMap() : new SimpleMap(); domData.set.call(el, "viewModel", scope); diff --git a/can-view-model_test.js b/can-view-model_test.js index a7b0023..03ed5d5 100644 --- a/can-view-model_test.js +++ b/can-view-model_test.js @@ -26,3 +26,13 @@ QUnit.test('a selector can be passed as the first argument (#6)', function(){ QUnit.ok(viewModel(el) instanceof SimpleMap, 'is can-map'); types.DefaultMap = DefaultMap; }); + +QUnit.test('set custom 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'); +}); From e61274e694393a312819b1385b0f6199b40d908f Mon Sep 17 00:00:00 2001 From: cherif BOUCHELAGHEM Date: Fri, 10 Feb 2017 21:19:40 +0100 Subject: [PATCH 2/2] fix set custom map on element with simple-map can-map and define-map --- can-view-model_test.js | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/can-view-model_test.js b/can-view-model_test.js index 03ed5d5..e6e3561 100644 --- a/can-view-model_test.js +++ b/can-view-model_test.js @@ -1,6 +1,8 @@ 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'); QUnit.module('can-view-model'); @@ -27,7 +29,7 @@ QUnit.test('a selector can be passed as the first argument (#6)', function(){ types.DefaultMap = DefaultMap; }); -QUnit.test('set custom Map on element (#5)', function(){ +QUnit.test('set custom can-simple-map on element (#5)', function(){ var vm, elVm; var CustomMap = SimpleMap.extend({}); var el = document.createElement('div'); @@ -36,3 +38,23 @@ QUnit.test('set custom Map on element (#5)', function(){ 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'); +});