Skip to content

Instantly share code, notes, and snippets.

@bartlewis
Last active December 20, 2015 04:39
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bartlewis/6072603 to your computer and use it in GitHub Desktop.
Save bartlewis/6072603 to your computer and use it in GitHub Desktop.
"Making a Well Structured Kendo UI Mobile App in Icenium with Require.js" http://codingwithspike.wordpress.com/2012/11/30/making-a-well-structured-kendo-ui-mobile-app-in-icenium-with-require-js/ This blog post above was my starting point, though I am not using Icenium (just KendoUI and PhoneGap Build). The one thing I did not like about this set…
define(function(require) {
var kendoApp,
$ = require('jquery'),
kendo = require('kendo'),
kendoLayouts = {
service: require('layouts/service')
},
kendoViews = {
drawer: require('views/drawer'),
availability: require('views/availability'),
utilization: require('views/utilization')
};
// Loop through all kendo layouts and views and spit their HTML into the BODY
function onBeforeInit() {
var i, item, objects = [kendoLayouts, kendoViews], htmlBuffer = [];
for (i=0; i<objects.length; i++){
for (item in objects[i]) {
if (objects[i].hasOwnProperty(item) && objects[i][item].hasOwnProperty('html')) {
htmlBuffer.push(objects[i][item].html);
}
}
}
$(document.body).prepend(htmlBuffer.join(''));
}
return {
init: function() {
onBeforeInit();
kendoApp = new kendo.mobile.Application(document.body, {
initial: 'availability-view',
transition: 'slide'
});
// Body initially hidden to prevent flash of unstyled content
$(document.body).show();
},
layouts: kendoLayouts,
views: kendoViews
};
});
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="format-detection" content="telephone=no" />
<meta name="viewport" content="initial-scale=1, user-scalable=no, width=device-width" />
<title>App</title>
<link rel="stylesheet" href="css/master.css">
<script data-main="app/main" src="vendor/require/require.js"></script>
</head>
<body id="app">
<!-- No cluttered mess of HTML elements from several view! -->
<script src="phonegap.js"></script>
</body>
</html>
require.config({
urlArgs: 'bust=v1' + (new Date().getTime()),
paths: {
kendo: '../vendor/kendo/js/kendo.all.min',
css: '../vendor/require/css',
'css-builder': '../vendor/require/css-builder',
normalize: '../vendor/require/normalize',
text: '../vendor/require/text',
jquery: '../vendor/kendo/js/jquery.min'
},
shim: {
kendo: {
deps: ['jquery'],
exports: 'kendo'
}
}
});
// Expose the app module to the global scope so Kendo can access it
var app;
require(['jquery', 'app'],
function($, application) {
app = application;
$(document).ready(function(){
function onDeviceReady(){
app.init();
}
if (!window.device || window.tinyHippos){
onDeviceReady();
} else {
document.addEventListener('deviceready', onDeviceReady);
}
});
}
);
<div id="utilization-view" data-role="view" data-layout="service" data-title="Utilization"
data-init="app.views.utilization.init"
data-model="app.views.utilization.viewModel">
<h2>Utilization</h2>
<p>Extended details for "Utilization" go here</p>
</div>
define([
'jquery', 'kendo', 'text!./utilization.html'
], function($, kendo, utilizationHtml) {
var viewModel = kendo.observable({
});
return {
html: utilizationHtml, // expose the markup for this view as an html string
init: function(event) {
},
viewModel: viewModel
};
});
@vivek-9dec
Copy link

Hi there,

I am trying to populate the viewModel in view's init event. The viewModel gets the data but it doesn't reflects on view. I had to rebind the view with viewModel to show the updated value.

My view file looks as below:

define([ 'jquery', 'kendo'], function ($, kendo) {
var viewModel = kendo.observable({
Name:"",
PopulateName: function() {
this.set("Name", "value from remote datasource");
}
});

return {
init: function (event) {
viewModel.PopulateName();
// I had to rebind the view with viewModel to show the updated value of Name in view
},
viewModel: viewModel
};
});

Please advice, should I rebind the view or is there any better alternate solution.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment