SteveSanderson / knockout.mapping

Object mapping plugin for KnockoutJS
Other
546 stars 767 forks source link

The key() function can get called on create()d as well as un-create()d items #118

Open rix0rrr opened 11 years ago

rix0rrr commented 11 years ago

This leads to a problem when the create() function does a more complex transformation than adding a prototype to a bunch of JSON data, or adding computed observables.

Specifically, it leads to trouble in a use-case where the incoming values are IDs, which get transformed to complex objects by the create() function.

In that case, the key() function both gets called on the input data (integers) and the values in the mapped collection (complex objects), which can't be desirable behaviour.

Example fiddle: http://jsfiddle.net/hRMux/3/

(Also, I've noticed that in the remove() operation, key() gets called multiple times on the value to-be-removed, once for every comparison, which is superfluous)

sagacity commented 11 years ago

Yes, you're right. The problem of having a large API surface is that stuff that I don't personally use (i.e. mappedRemove) can be a bit untested. I'll need to take a look and see what's causing it.

If you would like to attempt a fix yourself that would be most welcome. As a fellow Eindhoven developer, that's something that would earn you lots of bonuspoints. :)

rix0rrr commented 11 years ago

I would love to help, but I have to confess I'm not totally sure what the correct behaviour ought to be :). Anyway, I will try to take a crack at it (when I can find the time).

Didn't notice you where from Eindhoven, heh :).