从自定义函数返回ajax响应作为html到骨干视图
Return ajax response as html to Backbone View from custom function
我试图用它的渲染方法在主干视图中渲染部分视图。我创建了一个辅助工具来做这件事。
var DashboardPartial = (function(){
var _getPartialView = function() {
$.ajax({
url: _baseUrl + _url,
})
.done(function(response) {
_returnView(response);
})
.fail(function() {
console.log("error");
})
.always(function() {
console.log("complete");
});
};
var _returnView = function (response) {
return response;
};
return {
get: function (url) {
_url = url;
_baseUrl = '/dashboard/';
_getPartialView();
},
};
}());
所以,我想做的是调用DashboardPartial.get('url')并在backbone View渲染方法中使用响应。如下所示:
render: function() {
partial = DashboardPartial.get('url');
this.$el.html(partial);
return this;
}
问题是该函数确实从服务器获得部分,但我找不到返回响应的方法。在DashboardPartial函数中做console.log(response)确实显示了部分,但我希望能够返回它,然后将其作为变量传递给"this.$el.html()"。
您应该返回deferred($。Ajax在默认情况下返回它)从helper:
var DashboardPartial = (function(){
var _getPartialView = function() {
return $.ajax({
url: _baseUrl + _url,
});
};
return {
get: function (url) {
_url = url;
_baseUrl = '/dashboard/';
return _getPartialView();
},
};
}());
然后在渲染中使用它:
render: function() {
var self = this,
dfd = $.Deferred();
DashboardPartial.get('url').done(function(partial){
self.$el.html(partial);
dfd.resolve();
});
return dfd; // use this outside, to know when view is rendered; view.render().done(function() { /* do stuff with rendered view */});
}
然而,你可以使用requires来完成这个任务,再加上requires -text插件来加载模板,因为你的视图依赖于partial。
据我所知,您希望使用一个骨干视图呈现不同的部分。
你可以像这样创建工厂:
var typeToTemplateMap = {};
typeToTemplateMap["backboneViewWithFirstPartial"] = firstPartial;
function(type) {
return typeToTemplateMap[type];
}
然后在视图中使用它:
initialize: function(options) {
this.partial = partialFactory(options.type);
},
render: function() {
this.$el.html(this.partial);
return this;
}
下面是使用requires:
的样子// factory.js
define(function(require) {
var partialOne = require("text!path/to/partialOne.htm"), // it's just html files
partialTwo = require("text!path/to/partialTwo.htm");
var typeToPartialMap = {};
typeToPartialMap["viewWithFirstPartial"] = partialOne;
typeToPartialMap["viewWithSecondartial"] = partialTwo;
return function(type) {
return typeToPartialMap[type];
}
});
// view.js
define(function(require){
var Backbone = require("backbone"), // this paths are configured via requirejs.config file.
partialFactory = require("path/to/factory");
return Backbone.View.extend({
initialize: function(options) {
this.partial = partialFactory(options.type);
},
render: function() {
this.$el.html(this.partial);
return this;
}
});
});
// Another_module.js, could be another backbone view.
define(function(require) {
var MyView = require("path/to/MyView"),
$ = require("jquery");
var myView = new MyView({type: "firstPartial"});
myView.render(); // or render to body $("body").append(myView.render().$el);
});
你应该考虑使用requires,因为你做的几乎是一样的,但是没有依赖处理。
需求文档可以在这里找到:http://requirejs.org/docs/start.html
相关文章:
- 如何使用ExpressJS(在主视图/根视图上)呈现带有参数的HTML视图
- Angular数组更改时更新HTML视图
- 部分html视图's控制器未使用KendoPanelBar内容URL在指令模板URL中工作
- 将全局变量从控制器调用到HTML视图AngularJS
- 将数据从控制器调用到HTML视图AngularJS
- 将变量传递到html视图angularjs中
- 如何用程序禁用HTML视图源代码或加密HTML元素
- 在 Angular 控制器完成加载异步函数后加载 html 视图
- 如何在 Angular 中的基本 HTML 视图中加载视图
- 我可以在控制台中打印值,但不能在 html 视图中打印值
- ng-repeat显示的行等于属性的数量,甚至不在HTML视图上显示数据
- 为什么这些变量不在 html 视图中打印
- 如何将另一个Paper变量添加到JointJs的HTML视图中
- HTML视图在搜索(ajax)更新期间丢失状态
- 我如何传递node.js服务器变量到我的angular/html视图
- HTML视图看不到AngularJS
- 为多个客户端呈现html视图
- 将html视图转换为图像
- 我可以在chrome控制台使用javascript测试动态html视图吗?
- 无法用Angular从HTML视图获取值到控制器.解决方案返回$scope变量undefined