jQueryUI autocomplete (Rails 3.1): can't get source as url to work

Hey,

I’m able to duplicate everything in Ryan Bates’ screencast on jQueryUI autocomplete (#102), except for the piece that calls the server for completion data.

Here is my view html:

Now, this coffeescript works…

$('#search-markets').autocomplete

	source: ['foo', 'food', 'four']

…whereas, this coffeescript trying to tap the server…

$('#search-markets').autocomplete ->

	source: $('#search-markets').data('autocomplete-source')

…results in http POST calls to the root and not the data-autocomplete-source value of ‘/searches’.

Bates’s railscast uses a textfield in the context of a RESTful form, but I don’t expect this difference between his code and mine should explain my unexpected POST.

Any thoughts?

Lille

Hey,

I’m able to duplicate everything in Ryan Bates’ screencast on jQueryUI autocomplete (#102), except for the piece that calls the server for completion data.

Here is my view html:

Now, this coffeescript works…

$(‘#search-markets’).autocomplete

  source: ['foo', 'food', 'four']

…whereas, this coffeescript trying to tap the server…

$(‘#search-markets’).autocomplete →

  source: $('#search-markets').data('autocomplete-source')

…results in http POST calls to the root and not the data-autocomplete-source value of ‘/searches’.

There seems to be nothing wrong in your code. All I can think of that causes this is if another dom element

has an id of search-markets. Can you confirm that your view only has one dom with this id?

There seems to be nothing wrong in your code. All I can think of that causes this is if another dom element

has an id of search-markets. Can you confirm that your view only has one dom with this id?

Yes, I confirm. I modified the code to ensure no interference…

$('#search-markets').autocomplete ->

	source: "/searches"

For what it’s worth, the coffeescript compiles to this…

  $('#search-markets').autocomplete(function() {

return { source: “/searches” }; });

I see other approaches using more of the autocompletion settings, including callbacks, but I wonder why my simple attempt fails.

Lille

There seems to be nothing wrong in your code. All I can think of that causes this is if another dom element

has an id of search-markets. Can you confirm that your view only has one dom with this id?

Yes, I confirm. I modified the code to ensure no interference…

$(‘#search-markets’).autocomplete →

  source: "/searches"

For what it’s worth, the coffeescript compiles to this…

  $('#search-markets').autocomplete(function() {

return { source: “/searches” }; });

Ah it’s stupid of me not to see the difference. Remove → and it should work.

There seems to be nothing wrong in your code. All I can think of that causes this is if another dom element

has an id of search-markets. Can you confirm that your view only has one dom with this id?

Yes, I confirm. I modified the code to ensure no interference…

$('#search-markets').autocomplete ->
  source: "/searches"

For what it’s worth, the coffeescript compiles to this…

$(‘#search-markets’). autocomplete(function() { return { source: “/searches” }; });

Ah it’s stupid of me not to see the difference. Remove → and it should work.

No, doing that results in no network activity from the widget, at all – kills it.

This is what the code compiles to without ‘->’…

$(‘#search-markets’).autocomplete({

source: “/searches”

});

That looks better to me, but it’s not happening.

Lille

There seems to be nothing wrong in your code. All I can think of that causes this is if another dom element

has an id of search-markets. Can you confirm that your view only has one dom with this id?

Yes, I confirm. I modified the code to ensure no interference…

$('#search-markets').autocomplete ->
  source: "/searches"

For what it’s worth, the coffeescript compiles to this…

$(‘#search-markets’). autocomplete(function() { return { source: “/searches” }; });

Ah it’s stupid of me not to see the difference. Remove → and it should work.

No, doing that results in no network activity from the widget, at all – kills it.

This is what the code compiles to without ‘->’…

$(‘#search-markets’).autocomplete({

source: “/searches”

});

That looks better to me, but it’s not happening.

That’s the right js. You should paste here the code which handles requests to /searches.

This is what the code compiles to without ‘->’…

$(‘#search-markets’).autocomplete({

source: “/searches”

});

That looks better to me, but it’s not happening.

That’s the right js. You should paste here the code which handles requests to /searches.

Here’s a curl to confirm that the resource works…

curl ‘http://localhost:3000/searches?term=s

[“seom”,“some marker”,“some market”,“some market”,“some market”,“some market”,“some market”,“some market”,“some market”,…]

Could it be the response format? I don’t think so, I get positive results when I do something like this…

$("input#search-markets").autocomplete(

	source: (request, response) ->

		$.getJSON("/searches", { term: request }, (response) ->

		response(result)

		)

		# $.each(result, (i, val) -> console.log("fuck: "+val)))

	select: (event, ui) ->

		window.location = ui.item.value

		false

)

I’d just like to know why the simple form fails.

I guess I’ll drop this soon, as it feels idiosyncratic without broader interest.

Final call for any comments!

Lille

I’d just like to know why the simple form fails.

Turns out that a customized autocompletion file that I had included from vendor/assets/javascripts was superseding jquery-ui and, once removed, I got the expected behavior – so, this was completely one-off. Sorry not to have noticed it, sooner.

Lille