Skip to content
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

Problem when getting observableArray through computed observable #8

Closed
morticue opened this issue Mar 9, 2012 · 8 comments
Closed

Comments

@morticue
Copy link

morticue commented Mar 9, 2012

I made a fiddle showing the problem. The sortable list doesn't get updated when selecting a different option in the select list, whereas the foreach list gets updated without a hitch.

http://jsfiddle.net/qvrwy/

@rniemeyer
Copy link
Owner

@jofri Thanks for reporting this one. I can see the issue and how to address it. Will put a fix in this weekend.

rniemeyer added a commit that referenced this issue Mar 9, 2012
…nction (to capture dependencies during parsing of binding) and initialize widget in setTimeout to allow template to render.
@rniemeyer
Copy link
Owner

@jofri - put in a fix for this issue. Let me know how it looks for you. Here is your fiddle with the latest code: http://jsfiddle.net/rniemeyer/qvrwy/1/.

@mbest
Copy link

mbest commented Mar 10, 2012

Why not just do it this way (computed returns array instead of observable array)?

http://jsfiddle.net/mbest/qvrwy/2/

@rniemeyer
Copy link
Owner

@mbest that is a fine idea, but it doesn't work in his case. The sortable binding doesn't want the unwrapped observableArray, as it needs to write back to it. In your fiddle, if you sort your items on top, they will not be reflected on the bottom.

In a lot of the bindings that I have worked on, I have avoided the update function completely and used very specific computed observables in the init. However, there are cases where the subscription only happens in the parsing of the binding string that this will not account for.

For example, in some cases people might want to use a function (not a computed observable) to return a value, because they need to call the same logic several times and want to pass a different argument into each (put myFunction(someArg) in binding) rather than clutter up the view model by creating a bunch of similar computed observables. In this case, the dependency might only happen while parsing the binding string. Really I think that it is something that we should look into for KO core. It would be nice if the call to valueAccessor() would really capture all of the dependencies, even if we can't know sooner that the binding was invalid.

@mbest
Copy link

mbest commented Mar 10, 2012

Ryan, thanks for the detailed explanation. Very helpful.

Really I think that it is something that we should look into for KO core. It would be nice if the call to valueAccessor() would really capture all of the dependencies

This is one of the main features that I included to support independent binding evaluation. So hopefully this will get in soon.

@morticue
Copy link
Author

@rniemeyer Works like a charm, great work!

@rniemeyer
Copy link
Owner

@mbest didn't realize that your independent bindings work would do this properly already. It is an issue that I wrestle with frequently.

@mbest
Copy link

mbest commented Mar 11, 2012

@rniemeyer It wasn't something that I had specifically targeted but was supported almost automatically for independent bindings. I added some minor changes now so that it's supported in the 'dependent' binding mode also.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants