New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Explicit call to change event is suppressed #427

Closed
nitinhayaran opened this Issue Dec 19, 2013 · 1 comment

Comments

Projects
None yet
2 participants
@nitinhayaran

nitinhayaran commented Dec 19, 2013

When I explicitly call a change event, if model is not actually changed.

this.model.trigger('change', this.model);

Such events are suppressed by backbone relational.

@arobinson

This comment has been minimized.

Show comment
Hide comment
@arobinson

arobinson Jan 31, 2014

This is also swallowing change events when the model is fetched from the server. For example, say an object is partially populated when loading a collection. That model is fetched again when loading a details view. The Backbone.Model fires a "change" event in the sync callback from the fetch. This code in backbone-relational.js swallows this event:

                    if ( eventName === 'change' ) {
                        // `hasChanged` may have gotten reset by nested calls to `set`.
                        changed = dit.hasChanged() || dit._attributeChangeFired;
                        dit._attributeChangeFired = false;
                    }

The result is that my view is never rendered as it is waiting for the event that is never delivered.

arobinson commented Jan 31, 2014

This is also swallowing change events when the model is fetched from the server. For example, say an object is partially populated when loading a collection. That model is fetched again when loading a details view. The Backbone.Model fires a "change" event in the sync callback from the fetch. This code in backbone-relational.js swallows this event:

                    if ( eventName === 'change' ) {
                        // `hasChanged` may have gotten reset by nested calls to `set`.
                        changed = dit.hasChanged() || dit._attributeChangeFired;
                        dit._attributeChangeFired = false;
                    }

The result is that my view is never rendered as it is waiting for the event that is never delivered.

nl0 added a commit to nl0/Backbone-relational that referenced this issue Feb 25, 2014

Merge upstream
* upstream/master: (35 commits)
  Upgrade qunit
  Fix subModels not being populated properly on Underscore 1.6.0, due to `_.each` api change.
  Fire change events right away if we're not in a nested scenario. Fixes PaulUithol#427
  Document `store.unregister`
  `store.unregister` now also accepts collections or a model type
  Change `findOrCreate` to pass `parsedAttributes` to `build`, and adjust tests to reflect change.
  Remove unnecessary locking
  Update change log
  Add test for models not being added to store until they get an id
  Change where we listen to `relational:unregister`.
  Only add models with an id to the store. Closes PaulUithol#411
  Fix a bug in the (crude) performance test
  Add a small test for `clear`
  Fix collection return values when setting/removing `[]` and `null`. Ref PaulUithol#419
  Clarify the behavior of `findOrCreate` when it just a receives a scalar value. Ref PaulUithol#399
  Proper return values on collection methods for Backbone 1.1. Closes PaulUithol#419
  Submodels: accommodate multiple 'type' keys for the same submodel. Closes PaulUithol#429
  Hmm, fix spaces/tabs mix in the example
  Update a few version numbers in the docs to 0.8.7
  Backbone-relational 0.8.7
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment