Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Nov 18 21:05

    nlundquist on master

    Update dist for release (compare)

  • Nov 18 21:05

    nlundquist on v6.2.6

    Update dist for release 6.2.6 (compare)

  • Nov 18 20:22
    cherifGsoul review_requested #5425
  • Nov 18 20:22
    cherifGsoul commented #5425
  • Nov 18 20:19
    cherifGsoul synchronize #5425
  • Nov 18 20:19

    cherifGsoul on obserbale-properties-update-debugging-guid

    Fix observable properties wordi… (compare)

  • Nov 18 20:12

    nlundquist on master

    update can-stache-converters de… (compare)

  • Nov 18 20:12
    nlundquist closed #5424
  • Nov 18 19:24
    cherifGsoul review_requested #5425
  • Nov 18 19:24
    cherifGsoul opened #5425
  • Nov 18 19:21

    cherifGsoul on obserbale-properties-update-debugging-guid

    Remove ViewModel wording from d… (compare)

  • Nov 18 19:20

    phillipskevin on same-as-master

    (compare)

  • Nov 17 21:58
  • Nov 14 17:40
    nlundquist edited #5424
  • Nov 14 17:40
    nlundquist edited #5424
  • Nov 14 17:39
    nlundquist opened #5424
  • Nov 14 17:39
    nlundquist review_requested #5424
  • Nov 14 17:39

    nlundquist on 107-update-converter-demos

    update can-stache-converters de… (compare)

  • Nov 14 14:32
    greenkeeper[bot] labeled #5423
  • Nov 14 14:32
    greenkeeper[bot] opened #5423
Gregg Roemhildt
@roemhildtg
I think that map.set({ prop: [] }); and map.prop = [] should do the same thing, right?
Kevin Phillips
@phillipskevin
in this case, they probably should do the same thing
but it obviously has to go through different code paths
in case you have something like map.set({ foo: { bar: { baz: [] } } })
Gregg Roemhildt
@roemhildtg
right, that makes sense
I can see the benefit to deep assigning objects, thats clear but when would you want to deep assign array?
Viktor Busko
@Lighttree
Guys is there concept of root scope in can.js ? Something that can be accessible from any level ? I have to pass synthetic param like "current user" or "current language" to many components, and it feels like this should work something like globalScope.currentUser. I know that I can share it by setting leakScope but this will share scope implicitly.
Paul Tichonczuk
@tracer99
Our APIs suck. So even when we have an error, the response code is 200. How do we extend a basemap to check for the contents of an ajax response and throw the flow into the error state?
I think I have found my answer... trying
  url: {
    getListData: 'GET /json/shop/devices',
    getData: () => {

    }
  },
Paul Tichonczuk
@tracer99
still don't know how to route to failure though
Paul Tichonczuk
@tracer99
wrap the whole thing in a promise. doh. ok. it was nice talking to myself.
(Just need a cardboard cutout of Kevin here to talk to )
Frank Lemanschik
@frank-dspeed
np
Kevin Phillips
@phillipskevin
maybe I'll start selling those :smile:
Paul Tichonczuk
@tracer99
@phillipskevin Bitovi obviously needs a store to sell that and other useful items :)
Viktor Busko
@Lighttree

Hi guys, I have one question regarding can-connect. I have following model:

import DefineMap from 'can-define/map/map';
import DefineList from 'can-define/list/list';
import set from 'can-set';
import connect from 'can-connect';
import parse from 'can-connect/data/parse/parse';
import constructor from 'can-connect/constructor/constructor';
import canMap from 'can-connect/can/map/map';
import fallThroughCache from 'can-connect/fall-through-cache/fall-through-cache';
import constructorStore from 'can-connect/constructor/store/store';
import memoryCache from 'can-connect/data/localstorage-cache/localstorage-cache';
import realTime from 'can-connect/real-time/real-time';
import authBehavior from './authBehavior';

// Connection behaviors list
const behaviors = [realTime, authBehavior, fallThroughCache, constructorStore, parse, constructor, canMap];

const cacheConnection = connect([
    memoryCache
], {
    name: 'entity'
});

const Entity= DefineMap.extend({
    id: 'number',
    creatorId: 'number',
    message: 'string',
    title: 'string',
});

const algebra = new set.Algebra(
    set.props.id('id')
);

Entity.List = DefineList.extend({
    '#': Entity
});

Entity.connection = connect(
    behaviors, {
        url: '/api/v1/entity',
        Map: Entity,
        List: Entity.List,
        name: 'entity',
        parseInstanceData(responseData) {
            return responseData.checkinVO;
        },
        algebra,
        cacheConnection
    });

export default Entity;

I have list of entities on the page:

export const ViewModel = DefineMap.extend({
    entityListPromise: {
        get() {
            return Entity.getList({});
        }
    },
    entityList: {
        Type: [Entity],
        get(lastSet, resolve) {
            this.entityListPromise.then(resolve);
        }
    }
});

I need to add new item to sever and expecting that this list will be updated automatically by:

this.entity.save()

but it seems that it doesn't work :( I can see new item in the list only after page refresh.

I've tried this as well:

this.entity.save().then((response) => {
      Entity.connection.createInstance(response);
});

But didn't succeed as well.
Is it expected that can.js will update list automatically or I have to push this item into list by myself ?

kostya.aderiho
@kaderiho

Hi everyone, could someone help with the next question:

I'm using can.connection with these behaviors: url, constructor, canMap and getting the list of instances using getList():

[{priorityId: 1, description: 'some text'}, {priorityId: 2, description}, ....] .

When I call .save() as a POST request it works fine, but when I try to UPDATE information of this instance my URL is wrong and becomes just like localhost:3000/. As I understood canjs expects to see ID in the list of instance props instead of priorityId.

How I can parse the response of getList() and replace priorityId field on id? Does can.Algebra help with it? Thanks in advance!

kostya.aderiho
@kaderiho

BTW, when I use this algebra:

const algebra = new set.Algebra( set.props.id('priorityId') );

My .get() request looks wrong: localhost:3000/?id=283, but without Algebra it looked fine: https://localhost:3000/priorities/283

Will Stanton
@wstant
Hey everybody, is it possible to test two DefineMaps for equivalency using chai? deep.equal() doesn't seem to be working for me
Kevin Phillips
@phillipskevin
I would .serialize() them first
Will Stanton
@wstant
Hey Kevin!
Thanks, I'll try that out
Will Stanton
@wstant
Still having trouble, any other suggestions?
Kevin Phillips
@phillipskevin
what is the issue?
Will Stanton
@wstant
I'm trying to test a function which updates two properties in route.data- page and flow. The function updates the properties correctly, and if I test the equivalency of each property to the desired value, the test passes
When I try to test the function this way route.data.should.deep.equal(routeTestObject);
I get this assertion error: AssertionError: expected { Object (page, flow) } to deeply equal { Object (page, flow) }
let me know if you'd like to see the code for the test or the function, they're both quite small
Kevin Phillips
@phillipskevin
and you tried route.data.serialize().should.deep.equal(routeTestObject.serialize());?
Will Stanton
@wstant
ah I see, I tried route.data.serialize(); and routeTestObject.serialize(); before the test. It works with .serialize() in the test line
thanks Kevin
Kevin Phillips
@phillipskevin
cool, no problem, Will
Viktor Busko
@Lighttree

Maybe someone have an idea:
I'm trying to dynamically update UI when save something to data base using real-time behavior.
When I use fixture with data and call my list like:

entityListPromise: {
        get() {
            return Entity.getList({});
        }
    },

All works fine and when I save items like:

save() {
        this.entity.save().then((entity) => {
            Entity.connection.createInstance(entity);
            this.close();
        });
    },

UI updates automatically.

But as soon as I disable fixture and do the call with real get params that I need:

entityListPromise: {
        get() {
            return Entity.getList({
                employeeId: this.owner.id,
                startDate: new Date(2017, 1, 1).getTime(),
                endDate: Date.now(),
                limit: 1000
            });
        }
    },

It doesn't work. As I got these params somehow broke this...

Viktor Busko
@Lighttree

The only idea that I had is that the problem in these params:

startDate: new Date(2017, 1, 1).getTime(),
endDate: Date.now(),
limit: 1000

they are not presented in Map that I use.

Gregg Roemhildt
@roemhildtg
Can I pass a property to a define map that I don't want to be serialized?
var obj = new DefineMap({
    myProp: { ....} // I don't want to serialize myProp when I call obj.serialize()
})
Jeroen Cornelissen
@jeroencornelissen
@roemhildtg create a custom Definemap with DefineMap.extend and then setserialize: false on the prop.
Gregg Roemhildt
@roemhildtg
@jeroencornelissen yup, I think that's the only way to do so.
Nico R.
@nriesco

I'm really confused when declaring observables/variables within a defineMap. I think this is probably a basic topic, but I don't know how it really works.

I've seen (so far) the following syntaxes:

export const ViewModel = DefineMap.extend({
  var1: { type: String, value: 'super' },
  var2: { type: 'string', value: 'super' },
  var3: { value: 'hello', serialize: false},
  var4: 'string',
  var5: 'any',
  var6: '*',

})

I don't really know their differences and when to use them. As for the serialize option does it mean that ViewModel.serialize() would return everything except from attributes with serialize: false option?

Thanks

Jeroen Cornelissen
@jeroencornelissen
@nriesco yes, .serialize() doesn’t return serialize: false properties. I see them as “private” properties.
var1 is incorrect and should be Type with a capital T: Type: String or Type: MyCustomMap
var5 & var6 are identical, it means that your var can be anything. If you pass an object to type: ‘*’it stays an object and isn’t converted to a DefineMap.
AntonProkofyev
@AntonProkofyev
Hi all is there any extended guide for algebra?
Kevin Phillips
@phillipskevin
@nriesco https://canjs.com/doc/can-define.types.propDefinition.html is the best place to look to learn about the differences
Nico R.
@nriesco
thanks @phillipskevin it looks like that plus https://canjs.com/doc/can-define.types.html will help me understand (also thanks @jeroencornelissen !)
Kevin Phillips
@phillipskevin
there's also https://www.youtube.com/watch?v=eXp3m-ZlL4Y if you prefer a video
Justin Meyer
@justinbmeyer
Justin Meyer
@justinbmeyer
actually, it will be here: https://www.youtube.com/watch?v=R4F_U_BwwWM
Frank Lemanschik
@frank-dspeed
I need a new Job i think
Viktor Busko
@Lighttree

Guys correct me if I'm wrong. I need to add items to the list, and on UI it should appear at the top of the list (currently it adds to bottom and this is expected).
I'm using real-time behavior so can.js understands when to add by itself:

save() {
        this.entity.save((entity) => {
            Entity.connection.createInstance(entity);
        });
 },

What the correct way to tell it to add to very top of the list ? custom sort function in component when my list changes ?
There is also https://canjs.com/doc/can-set.props.sort.html but not sure that my case is correct for this, because as I got this designed to understand where we need to insert item, but I know this.

Frank Lemanschik
@frank-dspeed
hmmm there was a example for that
i think todoMVC
that adds todo on top