YUI widgets - dynamic updates - web

I am new to web programming and of course to YUI.
I tried using the overlay, chart and node-menunav.
Wanted to know if there is any option of creating these widgets using dynamic data coming in JSON format and updating the widgets as the new data comes in?
For us all the properties will come in JSON data from server and then using that data we need to render menubars, charts, property browser. Now i am not finding how to proceed with this requirement.
Thanks.

There is no default way of syncing widgets via Ajax. The only widget that comes by default with ways of updating its data is the DataTable widget. For the rest, and even for DataTable's attributes, you need to do it yourself.
However, if the data and widgets are complicated enough, you should consider using the YUI App Framework. The combination of Models and Views will help you a lot for creating complex layouts with widgets. Model will give you a way to link attributes to a JSON backend easily, specially if you're using a RESTful API endpoint. And View will give you tools for setting up the markup and reacting to events.
The Model's load and change events will let you know when the data updates. So in your view you'll be able to react to these events and set the corresponding attributes in your widgets:
var MyView = Y.Base.create('myView', Y.View, [], {
initializer: function () {
this.get('model').on('change', this._updateWidgets, this);
},
_updateWidgets: function () {
var model = this.get('model');
this.someWidget.set('someAttr', mode.get('someAttr'));
}
});
But as I said there is no right way of doing this. You can use whatever technique you like. The App framework is just a set of basic components that you can use to structure you application. It's designed for flexibility so it can accommodate many ways of using it. Other ways could use IO directly or use DataSources combined with Widget Plugins. This is a question with many correct answers.

Related

Render Widget as HTML in Code Behind

I have come across a situation where I'm needing to retrieve the rich text content of a page type column, and return that data/HTML as it would appear on a rendered page. A custom web part then serves aggregated data as nodes of XML or JSON.
For the most part this was easy enough in the code behind using DocumentQuery, however the problem is with widgets that have been inserted into the content.
My question is: How do I "render" a widget purely in code? Or even, what process is Kentico doing to render a widget that I might be able to reproduce?
I am somewhat familiar with the widget/web part/user control relationship, so I'm thinking a web part would need to be instantiated (somewhere, somehow) using the properties on the widget, and then accessing the RenderedHTML property of the web part.
Due to the format that widgets are stored in the data, I was hoping that they could just be Resolved with the MacroResolver, but that doesn't seem to be the case.
For reference, here is an example of how the out-of-the-box DateTime widget shows up:
{^widget|(jsuseservertime)False|(name)DateTime|(widget_displayname)Date+%26+time|(width)|(height)^}
Any input is greatly appreciated!
Have you checked this article http://devnet.kentico.com/articles/how-to-resolving-the-inline-controls? It is pretty old. But CMS.ExtendedControls.ControlsHelper.ResolveDynamicControls is available in newer Kentico versions. I think it might resolve you issue.

substitute for asp.net web form server side controls in mvc 5

I am rather new to ASP.NET MVC5. I know server side controls are not working directly in MVC, but there will be some way by which we will get similar controls in MVC5 for rapid development. Can you suggest me how can I find such controls? Can you list out all such mostly used common controls for MVC5?
Thanks in advance.
There's no concept of a "control" in MVC. There's various things that function similar to Web Form controls, but it depends on what you're trying to do.
HTML Helpers are similar in that you essentially call a function that returns rendered HTML. You can extend HtmlHelper to add your own.
Child actions function as a sort of separate request within the context of the main request. They accept parameters like an action, can do all the backend stuff an action can do (query database, etc.) and return a view rendered based on a model, like a normal view.
A partial view, in general, can function as a control as it allows you to insert a snippet of HTML somewhere.
Editor templates and display templates can be used in conjunction with Html.EditorFor and Html.DisplayFor, respectively to render a form field or some sort of HTML display for a particular property on your model.

create or inject ViewModel when building a "tabs" application

We try to build an application with a few tabs. As reference-project we use that example: http://slodge.blogspot.co.uk/2013/06/n25-tabs-n1-days-of-mvvmcross.html
To get the ViewModel-instances we need to create the tabs, we used the "HomeViewModel"-pattern as mentioned in that post: Create View Model using MVVMCross built in factory?
What I don't like at this approach is the initialisation of ViewModel's with "new". As far as I understand, it skips the whole ViewModel-Lifecycle (https://github.com/slodge/MvvmCross/wiki/View-Model-Lifecycle) which we really like. In our current project, we'd like to use the "start()" lifecycle-method, but it's never called due to initialisation with "new".
What worked for us was to go that way:
var loaderService = Mvx.Resolve<IMvxViewModelLoader>();
var vm = (UserListViewModel)loaderService.LoadViewModel(new MvxViewModelRequest(typeof(UserListViewModel), null, null, null), null);
So my question: Is that the way to do the job or is it just a dirty workaround and there is a much better solution?
Update: We came to that solution:
CreateTabFor<SettingsViewModel>("Settings", "settings");
//This method loads the ViewModel
private UIViewController CreateTabFor<TTargetViewModel>(string title, string imageName)
where TTargetViewModel : class, IMvxViewModel
{
var controller = new UINavigationController();
controller.NavigationBar.TintColor = UIColor.Black;
var viewModelRequest = new MvxViewModelRequest(typeof(TTargetViewModel), null, null, null);
var screen = this.CreateViewControllerFor<TTargetViewModel>(viewModelRequest) as UIViewController;
SetTitleAndTabBarItem(screen, title, imageName);
controller.PushViewController(screen, false);
return controller;
}
The 'viewmodel lifecycle' is an area of conflicting interests in MvvmCross. The root cause is the conflict between:
viewmodel's which are just the models for any view
viewmodel's which are specifically used within the 'ShowViewModel' navigation process
For simple 'whole page' User Experiences, the C-I-R-S viewmodel lifecycle is easy to support and to ensure it gets consistently used.
However, as soon as the user experience starts to merge in tabs, flyouts, hamburger menus, dialogs, split views, etc then:
the developers sometimes want to control viewmodel lifecycles themselves
it's not as easy for the framework to ensure that view models are always created, activated and tombstoned/rehydrated consistently
Personally, I like your approach - of trying to ensure all viewmodels are independent and all constructed the same way - but MvvmCross doesn't force this approach on all developers.
Specifically for tabs, most of the existing examples do use the 'owned sub-viewmodel' pattern that you've identified.
However, it should be relatively easy to implement other mechanisms if you want to - just as you already have.
In particular, you can:
use the loaderService directly - getting hold of it via Mvx.Resolve<IMvxViewModelLoader>();
use ShowViewModel with a custom presenter to create both views and viewmodels - the beginnings of this is illustrated in that N=25 video but you could take it much further and actually add the tabs in response to ShowViewModel calls.
use alternative calls to create the child tabs and their viewmodels inside the Views - e.g. where the Touch sample currently calls
var screen = this.CreateViewControllerFor(viewModel) as UIViewController;
this could easily be replace with something like:
var screen = this.CreateViewControllerFor<ChildViewModel>() as UIViewController;;
(or one of the other overloads from MvxCanCreateIosViewExtensionMethods.cs)
One repo where I know some users have taken some of these ideas and played with them is the Sliding menu repo - I think they have chosen to use this.CreateViewControllerFor<TViewModel> to create their view models. This may or may not be the way you choose to go - but it might be of interest for you to experiment with.

Nodejs, Mongoose, Jquery widget

Hi i was wondering if there is a module for nodejs which allows for simplistic widget creation in combination with mongoose as a datasource to create nice JQuery library (such as dojo or YUI) widgets.
for example when i setup my schema it would be nice to do something like (note code not runnable just pseudo)
var carSchema = {
carname: "String",
registration: "String",
mileage: "Number"}
methodCallback = function() {
car.find({}, ....) {
return results;
}
}
model.register("car", carSchema);
res.send(model.createWidget("listview", options, methodCallback()));
where createWidgets returns the html list view code and paging for the cars from the result i return in my callback. it would be nice if it integrated with REST so if i delete an item from the listview then it actions this on a connection to another method.
basically i want to try and remove all the difficulty of populating, deleting, updating, a widget on client side development.
"remove all the difficulty of populating, deleting, updating, a widget on client side development."
seems not very realistic as you always have to specify some specific CURD logic based on your needs.
For pure front end part, you may try AngularJS, which provide easy to use RESTful CURD service http://docs.angularjs.org/tutorial/step_11
if you are into more giant framework of full stack javascript (may not be Nodejs, Mongoose, Jquery widget), wakanda http://www.wakanda.org/features/studio may have something you are looking for as provide some widget integration with datasource.

developing library controls for xpages

I' working on a library control for Xpages and need some help in creating.
I would create a control which reads a configuration file and creates controls in a table, controls like Editboxes, checkboxgroups and so on.
so and now to my questions:
could I initiate controls from the Exlib or must I implement them all by my self?
if I could use them from the Exlib could anyone explain me how?
I hope its clear what i mean if not please ask me for further informations.
When creating your own components, if you're closely replicating some behavior that is already in an extension library component, I highly recommend you extend that component and just add what's needed to accommodate your different functionality. This makes things much easier and you don't have to code around every little scenario that the component might be placed in.
But, if you are developing a component that is nothing like any of the extension library or core components then just ensure your component extends UIComponent or UIComponentBase. If going this route, you'll also need to create your own renderer which extends Renderer. This is what will build the on-screen representation of your component. Again, if there's already something in the core components or extension library components that closely mimics what you need then make your renderer extend that renderer. Also, don't forget to include the renderer definition in the faces-config file and the component definition in the xsp-config file or your component won't work.
As for initiating controls from the extlib.... I assume you mean can you inject them onto the page at runtime. If so the answer is absolutely yes. To add an input text field to the page where there is a container (i.e. panel, div, span, whatever) with an ID of "someContainer"
XspInputText input = new XspInputText();
input.setValue("someValue");
input.setId("someID");
UIComponent container = FacesContext.getCurrentInstance().getViewRoot().findComponent("someContainer");
container.getChildren().add(input);
To see the api for all of the core and extension library components take a look at the XPages Controls Documentation. For a more complete tutorial on creating your own components take a look at my blog for creating a custom component inside an nsf, the steps are pretty much the same for putting them into a library:
Part 1,
Part 2 and there is an example database in the Part 2 post.

Resources