Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
Kevin Phillips
@phillipskevin
:thumbsup: great @nriesco
Nico R.
@nriesco
is it possible to do this in can 2.x? this.attr(‘myAttr’, new MyObject({a:1,b:2})
and then in the .stache file use {{#with}} and access/edit the object properties?
Nico R.
@nriesco
I couldn't make it work using donejs
Nico R.
@nriesco
any ideas?
Kevin Phillips
@phillipskevin
@nriesco can you share a JSBin?
lmagarian
@lmagarian
I have a property on a superMap that needs to load via another API. I'm trying this but know it's not right. Any tips?
"possibleEvents": {
"value": [],
"get": function () {
return Event.getList({}).then( function ( eventList ) {
return eventList;
});
}
},
Nico R.
@nriesco
@phillipskevin this would be the closest to what I’m trying to do
Chasen Le Hara
@chasenlehara
@lmagarian You could assign eventList to another property in your view model, so possibleEvents is the promise and eventList is the array.
I personally like to follow this pattern of having one property be the promise: https://github.com/donejs/bitballs/blob/master/public/components/player/list/list.js#L64-L68
Then use the promise’s value in a template, or wherever else: https://github.com/donejs/bitballs/blob/master/public/components/player/list/list.stache#L19
lmagarian
@lmagarian
Thanks @chasenlehara
Chasen Le Hara
@chasenlehara
👍
Chasen Le Hara
@chasenlehara
@nriesco I think the Type is creating a new instance when you’re expecting it to be null.
Also, new Map() is not what you want, but just new Person(), right?
Here’s how I think I would approach what you’re doing: http://jsbin.com/taguluzeku/1/edit?html,js,output
lmagarian
@lmagarian
@chasenlehara will that make more than one API call if playersPromise.value is referenced in multiple places?
Nico R.
@nriesco
@chasenlehara thanks, it looks good and it works as I expected. I’ll try to modify my donejs project to see if I can reproduce what you did.
Chasen Le Hara
@chasenlehara
@lmagarian It shouldn’t; value is only run the first time to get the initial value.
Even if it were in a get, it would only run again if something observable changed, but there’s nothing observable in that function.
Let’s say you did need to make that API call again because the arguments changed. That might look something like:
    orderBy: {
        value: "name"
    },
    playersPromise: {
        get: function(){
            return Player.getList({orderBy: this.orderBy});
        }
    }
Nico R.
@nriesco
@chasenlehara it does work in http://jsbin.com/taguluzeku/1/edit?html,js,console,output but when including it into my donejs project it will create the instance and even with default values, but if you modify any of the properties then it will “reset” the object (the if condition is met):
type: function(newPerson) {
  if (newPerson && newPerson instanceof Person === false) {
    console.log('>>> debug data 1:', newPerson);
    return new Person(newPerson);
  }
  return newPerson;
}
the problem after doing some debug is that the newPerson is the value of the input field, so it will never have any valid data again (as it is just one plain value)
I thought newPerson would at least be an object but only the currently selected input value is passed as newPerson
could it be can 2.x that is causing this?
Kevin Phillips
@phillipskevin
{($value)}=“newPerson” is binding the value of the <input> with newPerson, right?
Nico R.
@nriesco
@phillipskevin I made a mistake this is the JSbin: http://jsbin.com/kelilib/1/edit?html,js,output
the approach used by @chasenlehara works
but when I use it within the donejs project it won't
the way I use it looks like the jsbin (the last one) so you can set each of the properties
whenever you modify any of the inputs that are binded to a property of this new object then every input field is set with the return new Person(newPerson) code
and newPerson contains whatever you wrote on one of the inputs
not the complete object
Nico R.
@nriesco
it is doing something equivalent to this: myObjectInstance = myObjectInstance.propertyOne
every time you modify (even before saving) it will do that so as a result you enter data on any field and then all the fields are set to null/empty
Kevin Phillips
@phillipskevin
maybe it’s an issue with {{#with}}, can you try explicitly doing like {($value)}=“newPerson.name”?
@nriesco
Jeroen Cornelissen
@jeroencornelissen

How do you handle a bulk save or destroy?
I have something like this: let todos = TodoModel.getList() and every todo has a checkbox and are stored in a selection DefineList.
Now I want to delete the selected todo items.

selection.forEach(todo => {
  todo.destroy();
});

This results in multiple requests to the backend, how can I group these request?
Do I make a custom funtion in my model bulkDestroy and then splice them out of my todos list? Or how do you handle this?

lmagarian
@lmagarian
@chasenlehara thanks!
Nico R.
@nriesco
@phillipskevin your approach does work (instead of {{#with}} access to each variable using newPerson.xxxxx)
but I fixed other stuff at the same time so I need to make sure if that was actually the solution or not
I’ll let you know asap
Kevin Phillips
@phillipskevin
ok, thanks
Nico R.
@nriesco
@phillipskevin yes, somehow {{#with}} is not working correctly, I’ll try one last thing..
Kevin Phillips
@phillipskevin
only in donejs?
Nico R.
@nriesco
no it didn’t work (wrap it with an {{#if}} statement)