Angular.js with jQuery Mobile - jquery-mobile

I'm doing an app with jQuery Mobile and Angular.js. Cause we have some issues using both libs, exists an adapter that do "teh job".
So I'm trying using routeProvider to route my pages. But I still can't render pages using this.
Here plunker if u can help show me the way.
http://plnkr.co/edit/DNGiT83csWMmfYnHXOop
Thanks in advance!

I ran into a similar problem and maybe what I learned might help you. It comes down to the differences in the way angular and jquery go from one page/section to another (routing).
First, the basics: angular routes by inserting a chunk of html into your view, then on whatever click/action/etc, removing that html from the view and adding a new chunk of html. Essentially you're on the same page all the time; it's just the included html is changing. In contrast, think of jqm as loading up all the html into the same page, with those html chunks as divs. Instead of removing html chunks and replacing them (via routing), it's just turning divs off and on. (There are multi-page jqm apps but SPAs really highlight the differences.)
My suggestion is to pick which set of features you really want: angular's minimalistic loading (only as you need it), or jqm's flashy transitions and other built-in features. If you've got a massive app with a lot of data on every page, you might want to bypass jqm and use angular alone, and see what you can do with angular's new animate functions. It'll mean you'll need to build (via CSS or javascript) duplicates of the jqm features -- and from what I've seen, you can get close but it won't quite be as pleasantly streamlined as jqm.
If the jqm built-in features are what you really want, then skip using angular's routing. It'll just introduce all kinds of complications, anyway. Set up your pages using jqm's pattern, and use angular only where you're dealing with data.
What I've found works best is to treat it like it's a jqm app overall, and only add angular into the sections where you need it. After all, you don't have to add ng-app at the html line; you can add it into a single div as needed. Since jqm is happiest as a system-wide kind of thing, while angular is just fine being confined to pieces within a system, so far I've found jqm-whole and angular-parts to be the simplest way to get the best of both worlds.

Related

How to make an iframe not reloading itself in a rails 4 layout?

I'm actually making a rails app for a music band. And they recently asked for a music streamer to play music throughout the whole application.
As they're on bandcamp, I thought that I might as well do that via the iframes they provide, before building a javascript streaming feature in some time.
But, here's the issue : when you put an iframe in your application.html.erb, it's reloading itself everytime the user is loading a new page. Exactly as if the code wasn't in the layout, but on every pages instead.
So far I've tried some stuff, like putting the iframe in a partial and calling it via : render 'layouts/shared/music_widget', but the issue stay the same.
As I've found nothing on the web so far, I'm guessing I've missed something ( maybe I lack some knowledge in rails' basic magic )... so, I'd be glad if someone here could help me with this one.
Thanks !
That’s because when you reload, a completely new page is generated and downloaded by your browser. The whole HTML is replaced with every HTTP request. To achieve what you want, you’d have to look into asynchronous solutions and SPA’s (Single-page Applications), basically having only one page and replacing the content of it using AJAX.
I suggest using batman.js, a great library which makes it relatively easy to switch to AJAX page loading using Rails. A big advantage is that it was built with Rails in mind, and as such it couldn’t be more simple to integrate it with your current application. However it does require you to learn CoffeeScript.
Alternatives include AngularJS, Ember.js, Backbone.js, each of them having gems helping with Rails integration.
I am sure there are many more, but I listed the most popular choices. You could also create your own JavaScript to handle that. The easiest solution in such a case would be to have the big <div> containing everything but the iframe; bind to the click event of a elements with a special attribute set (for example data-ajax="true"), make an AJAX request to the URL specified in href, and replace the content of the big <div> with the response.
In any case, you’ll need to read more about Single-page Applications.
I am working on a similar project which requires the use of iframe to play music thoughout the website. For that I used two layouts, one is the application.html.erb and another one is called player.html.erb
Now Application .html.erb is the one which contains header, footer and the iframe. And the other layout does not contain any of these and is the one which is used to for the actions to be opened in the url.

BoilerplateJS and Jquery Mobile

wondering how to use BoilerplateJS with Jquery Mobile. Perticulary when it comes to manage url and how to deal with the which is created automatically.
Thanks.
I haven't seen any examples out there so have been doing exactly that myself but haven't yet completed the exercise. You need to add the jQuery Mobile references into the top level index.html and then modify the html (structure, tags) to something that JQM will like to render. You also need to ensure the views correctly trigger enhancement of content changes. It seems straight forward enough although styling might yet be a gotcha so I can't yet say whether it's trivial-but-time-consuming or going to be a mess.

jQuery mobile prefetch data-icon

I have many different pages in jquery mobile which utilizing different data-icon, some custom and some are built in, is there a way to preload all of these data-icons, because now its like when a new page loads with a new icon for the first time, it will be blank for a second before it is loaded. which is annoying.
I am using phonegap+backbone+jquery mobile. so its heavy java stuff instead of pure html.
Have you thought about using image sprites? This way, all icons will be cached on the first page load. It's a little extra css upfront, but I think it'd be really worth it!

How to create a proper multi-page structure with jQuery Mobile?

I want to create a multiple page jQuery Mobile application and don't have any idea how to do that in a proper way.
Is is better to go for a single HTML file for each page or better putting all pages in one single file? How about changing pages and reacting to events like initializing, stopping, starting, coming back to pages, etc.?
I'd like to know the perfect way to build the page change with all the events in jQuery Mobile.
It depends on your application, you can either put all pages together or separate them. All Jquery transaction work with both methods.
Read more about this subject here: Pages

jQuery UI - Is it really this messy

I render a page from the server (an admin intranet app) then I want jQuery UI it and keep things consistent with the selected jquery ui theme.
Take for example buttons
<button class="do-something">Logout</button>
The jQuery UI documentation say that one should not apply ui-state-default and 37 other CSS classes manually (at server render time), but on a initial render one should call $(selector).button() where selector maybe just 'button' or '.nice-button' etc..
This seems a bit smelly to me but I suppose the fine grain control make sense given its not intending to be as high-level as ExtJS or Sproutcore etc..
Then I thought what about an icon button I'd thought <button class="do-something ui-icon-arrow-e">Logout</button> when calling .button() it would check for presence of such class and render accordingly. However it seems one has to do button(icons { pri: 'blah'}}). Yikes.
Am I approaching it wrong? it seems like a code smell here mixing a lot JavaScript statements related purely to rendering outside the html? I haven't even considered stuff injected later via ajax etc..
Then I want to have a panel with heading like an accordion, I ended up having to dump about 93 CSS classes onto a div and h3 to get things consistent. I then created my own extension jQuery $ fn extension .crmPanel() which was basically parent.addClass 43 and parent.children('h3:first').addClass() 53 times. Seems messy
How are people using jQuery UI in intranet apps, or are you just purely using the element and doing the others bit manually?
(note divide any quantitative figures related to number of CSS classes by 4)
jQuery UI CSS Framework gives a nice base for some of the UI elements such as Tabs, Dialogs etc. We have found it lacking and therefore would usually add another CSS file to enhance standard CSS with some CSS3 effects, add typography and Grid System.
The result looks like this:
http://agiletoolkit.org/intro/engage
and although it's still based on jQuery UI theme it does not look like that.
When it comes to buttons, we sometimes use the jQuery but sometimes use CSS. In that particular example, CSS is used, in other cases (selector).button() is used:
http://codepad.agiletoolkit.org/buttonpushing.html?b=devel
In regards to panels and layouts, compared to ExtJS, jQuery does almost nothing to help out. Besides, I'm not fan of JS-controlled layouts since they are slow and jittery. I think CSS is a way to go.

Resources