我想在同一个控制器内容数组中存储不同的对象,并使用适当的视图模板渲染每个对象,但理想情况下是相同的视图.
我正在使用下面的代码输出列表对象.它们目前是相同的,但我希望能够使用不同的.
<script type="text/x-handlebars">
{{#each App.simpleRowController}}
{{view App.SimpleRowView class="simple-row" contentBinding="this"}}
{{/each}}
</script>
Run Code Online (Sandbox Code Playgroud)
该视图的简化版本如下.我没有包含的其他功能可以用于任何对象,无论模型如何.所以我理想情况下会有一个观点(虽然我已经阅读了一些关于mixin的文章,如果不是这样的话可以提供帮助).
<script>
App.SimpleRowView = Em.View.extend({
templateName: 'simple-row-preview',
});
</script>
Run Code Online (Sandbox Code Playgroud)
我允许不同对象类型的前几个测试最终在"简单行预览"中遇到了大量条件 - 它看起来很糟糕!
有没有办法动态控制迭代我的内容数组时使用的templateName或视图?
UPDATE
非常感谢两位受访者.视图中使用的最终代码如下所示.我的一些模型是相似的,我喜欢在我的应用程序中能够在模板(或某种"状态")之间切换的想法.
<script>
App.SimpleRowView = Em.View.extend({
templateName: function() {
return Em.getPath(this, 'content.template');
}.property('content.template').cacheable(),
_templateChanged: function() {
this.rerender();
}.observes('templateName'),
// etc.
});
</script>
Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,目前包含相同模型的对象的视图.它们从服务器检索,循环并使用add方法添加到列表控制器
<script>
App.Controllers.List = Em.ArrayProxy.create({
content: Ember.A([]),
add: function(obj){
this.pushObject(obj);
}
});
</script>
Run Code Online (Sandbox Code Playgroud)
我现在正在开发一个用户创建新对象的部分(通过验证后)将添加到列表中并发送到服务器.
我找不到关于通过输入表单创建新对象的最佳模式的任何示例.我可以看到一些选项,并且半实现了一些,但没有任何感觉是正确的.
我可以解决我想要的功能,但我更愿意确保我了解最佳实践.
我目前有这样的东西(这是我列表中的第二个子弹)
<script>
App.Views.ItemCreate = Em.View.extend({
content: App.Models.Item.create({}),
templateName: 'create',
createButton: function(){
var itemObj = this.get('content');
var item = {};
item.title = this.get('content').get('title');
$.ajax({
type: 'POST',
url: '/test/data.json',
data: item,
dataType: 'json',
success: function(responseData, textStatus, jqXHR) {
App.Controllers.List.add(itemObj);
}
});
}
});
</script>
<script type="text/x-handlebars" data-template-name="create">
{{view Em.TextField id="create-title" valueBinding="content.title"}}
<a href="#" {{action "createButton" }}>Create</a>
</script>
Run Code Online (Sandbox Code Playgroud)
任何帮助非常感谢
笔记
我已经改变了pangratz的正确答案.虽然其他回复直接回答了我的问题,但我相信那些通过Google找到这个问题的人应该参考Pangratz提供的答案,因为它不仅是好的MVC,而且更像是Ember-y:o)
我在安装pecl memcached软件包时遇到了麻烦.
没有任何yum或pear/pecl安装命令的任何喜悦我提到这个问题安装PECL Memcached错误并开始尝试配置/制作手动
我正在使用pecl下载最新的(memcached-2.2.0)然后解压,phpize ...
如果我使用--disable-memcached-sasl进行配置,则configure完成但make失败.看起来像语法错误
In file included from /root/memcached-2.2.0/php_memcached_private.h:28,
from /root/memcached-2.2.0/php_memcached.c:26:
/root/memcached-2.2.0/php_libmemcached_compat.h:56: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘php_memcached_instance_st’
/root/memcached-2.2.0/php_memcached.c:328: error: expected declaration specifiers or ‘...’ before ‘php_memcached_instance_st’
/root/memcached-2.2.0/php_memcached.c:329: error: expected declaration specifiers or ‘...’ before ‘php_memcached_instance_st’
/root/memcached-2.2.0/php_memcached.c:330: error: expected declaration specifiers or ‘...’ before ‘php_memcached_instance_st’
/root/memcached-2.2.0/php_memcached.c: In function ‘php_memc_get_impl’:
/root/memcached-2.2.0/php_memcached.c:594: warning: passing argument 4 of ‘memcached_mget_by_key’ from incompatible pointer type
/usr/include/libmemcached/memcached_get.h:38: note: expected ‘char **’ but argument is of type ‘const …Run Code Online (Sandbox Code Playgroud) 对任何知道答案的人来说,这听起来都是一个非常愚蠢的问题!
当我创建一个JSfiddle时,它会出现在我的列表页面上
cGzCe Revision 8
然后我标题为'多创建节点'(额外的空间,因为修订号被添加,没有空格到这个短语)并再次更新并得到这个
cGzCe Multi-create nodes Revision 9
我想用更大的字体改变cGzCe的文本 - 我在哪里可以做到这一点?前几天我把别人的小提琴分开了,它已经完成了,但我看不出设置与我的小提琴有何不同!请帮助:-D
...
另外,对于奖励点 - 有没有人知道如何禁用自动缩进...(或使其可靠地工作,或将缩进降低到两个空格..)
谢谢!
我正在创建一个模块,允许用户在这种情况下更新单个字段,即用户实体.
下面的代码是我最初用于使其工作并测试模块的其他元素的方法的示例
global $user;
$account = user_load($user->uid);
$edit = (array) $account;
$edit['field_lastname']['und'][0]['value'] = 'test';
user_save($account, $edit);
Run Code Online (Sandbox Code Playgroud)
然而,这绕过了Drupal中其他地方定义的任何字段验证.我不想重现其他地方写的任何验证 - 这不是Drupal方式!
我的问题是:Drupal 7中是否有一个函数可以调用来更新单个字段的值.我想这样的函数会清除相应的缓存,调用字段验证等.
我知道解决方案将与我当前基于用户对象的解决方案完全不同.我只是不能为我的生活在API中找到合适的功能.我徘徊是否我正在寻找一个保存功能的事实是问题 - 并且还有一些其他必要的步骤.
任何帮助感激不尽.
我正在尝试在查看特定类型的节点时运行一些自定义代码.只是我用nodeapi实现的一小段代码.这在Drupal 7中运行良好,但由于我在ctools页面管理器中覆盖了node_view页面,因此它不会触发.
function mymodule_node_view($node, $view_mode, $langcode) {
if($node->type=='webform') {
drupal_set_message('test');
// actual code will go here
}
}
Run Code Online (Sandbox Code Playgroud)
是否有可以使用的不同核心功能?或者我找不到的ctools页面管理器钩子?
我可能在某个地方执行一些预处理主题覆盖中的代码,但它不是最好的事情.
首先让我说我已经阅读了很多关于使用骨干/ jQuery移动组合和骨干/ Sencha比较的问题和博客文章,并且实际上已经在这个空间中占据了一段时间,但仍然没有找到我正在寻找什么.
我对Sencha非常熟悉,并且过去曾将它用于包裹(phonegap等)应用程序,我非常喜欢它.但是,对于Web项目的较小代码库以及对浏览器兼容性和其他各种原因的更多控制,它不适合某些任务.
当我开始尝试从头开始设计移动(以及桌面和平板电脑)骨干网络应用程序时,我发现我错过了三个关键的事情
我并没有在整个应用程序中模仿每个设备的本机操作系统风格,并且实际上更愿意(虽然遵循一些明智的约定)使它们看起来有点不同.
Ember有火焰,我以前用过它,这就是我正在寻找的东西.
我知道我可以建立一个jQuery移动,自定义脚本,jQ插件/ iSroll,CSS库,骨干UI等工具包,并且喜欢编译我自己的'堆栈'的想法,但由于某种原因它只是感觉不对.
所以,要把它带回更多的实际问题.我想我正在寻找一个没有专门链接到库的单个项目 - 理论上如果需要的话,可以在静态编码的页面上自行运行(尽管现在情况不是这样) ).或者也许是其他人经历过类似旅程的一些话,也许最终会出现我之前提到过的图书馆混合,为什么他们认为这是最好的解决方案.
我不想做任何太疯狂的事情,说一些有点像旧的sencha oreilly示例,但使用一些旋转木马,我会用多种设备和浏览器来覆盖各种响应式CSS和一些JS.
我也会继续自己看这个并报告我是否有任何有趣的东西
干杯
编辑
在调查这个时,我意识到它只是真正想要从Sencha转盘和滚动的旋转木马.我注意到Cubiq有一个漂亮的slideview组件,可以非常整齐地处理旋转木马,占地面积小.我找到了一个stackoverflow的答案,关于使用原始的iscroll进行垂直滚动.请参阅下面的答案,以便成功地将两者结合 使用如何在SwipeView中使用iScroll4?
这需要一些调整才能在桌面上正常工作.我也想从标签式UI中控制它.无论如何,我并没有回答我自己的问题,但鉴于这有几个赞成,我会发表我的一些想法.
快速编辑
您可以将选项卡的事件附加到幻灯片视图https://dl.dropbox.com/u/81328343/scroll/1.html但是目前,它仅为下一个/上一个而非直接页面(选项卡)访问设置动画
我一直在尝试重新编写一个尚未完成的我的ember应用程序来使用require.js
这主要是为了感兴趣的价值,为了方便起见,当我想为我的车把模板使用require-text时,我开始研究它.因此,我没有发现自己正在研究任何类似的AMD相关性能获胜或类似的事情.但现在我已经开始通过定义模块来设置我的模块,我发现它更容易阅读并且想坚持下去.
有一个关于堆栈溢出的问题,其中被问到的并且发布了他们的发现Ember.js和RequireJS但是没有其他示例,例如关于todo MVC的示例可以在关于如何最佳地构造和引用文件的参考文献中找到更复杂的应用.
所以无论如何,我的问题是:正确使用require JS需遵循哪些规则.它实现了什么(除了访问AMD)?我很难通过一个并不真正需要它的测试项目来解决它,但我想学习正确的与ember相关的原则,以便将来可以使用它.
我从示例代码中看到,这个想法可能是从模块中删除对全局命名空间的所有引用.那是对的吗?我没有足够的例子来发现一个模式.
目前,我的结构顶层的文件可能有这样的东西
<script>
define(['jquery',
'app/controllers/mailshotlist',
'app/controllers/sites',
'ember'],
function($, MailShotList, Sites) {
var App = Em.Application.create({
Views: Em.Namespace.create(),
Models: Em.Namespace.create(),
Controllers: Em.Namespace.create(),
init: function() {
this._super();
this.Controllers.set('Sites',Sites.create());
this.Controllers.set('MailShotList',MailShotList.create({
sitesControllerBinding: 'App.Controllers.Sites'
}));
}
});
return window.App = App;
});
</script>
Run Code Online (Sandbox Code Playgroud)
因此,尝试在应用程序初始化时将显式app.x引用拼接在一起.因为我猜你的模块是否都在代码中明确地引用了彼此,所以它没有正确模块化.我现在还不在我想重用模块的阶段,但我认为这是目标之一
我希望这不要成为关于AMD是否值得的辩论,我的问题是具体说明需要遵循哪些规则才能最大限度地利用带有require js的ember.虽然如果没有使用带有需求的余烬有很好的具体原因,那么这将是有趣的.
我想我已经漫无目的地冒着风险将这个锁定为"非生产性"但是如果你能理解我的问题以及我想要了解的内容(或者如果我完全咆哮错误的树)那么请发帖回答
javascript ×4
ember.js ×3
drupal ×2
drupal-7 ×2
backbone.js ×1
centos ×1
css ×1
drupal-fapi ×1
jsfiddle ×1
memcached ×1
mobile ×1
pecl ×1
requirejs ×1
sencha-touch ×1