- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Web 应用程序的新手,偶然发现了 Meteor 中的一个问题,我还没有找到好的解决方案(如果 https://stackoverflow.com/ 上已经有答案,请告诉我)。
我有一个 profileEdit
我想使用 Meteor.users
中的默认值更新模板页面呈现时的集合。使用 <input type="text">
的模板助手可以很好地工作,但对于:
<select class="form-control" name="profileNamePrefix" id="profileNamePrefix">
和
<label><input type="radio" name="profileGender">Male</label>
我不得不使用 jQuery DOM 操作来让它工作(这可能是我真正的问题):
JS
// GLOBAL FUNCTIONS
updateSelectedOption = function() {
var currentUserId = Meteor.userId();
var currentUser = Meteor.users.findOne(currentUserId);
var profileTitleOptions = $('#profileNamePrefix').children();
var status = false;
for (var i = 0; i < profileTitleOptions.length; i++) {
if (currentUser && currentUser.profile &&
currentUser.profile.title === profileTitleOptions[i].value) {
profileTitleOptions[i].selected = true;
statue = true;
break;
};
};
return status;
};
updateCheckedRadio = function() {
var currentUserId = Meteor.userId();
var currentUser = Meteor.users.findOne(currentUserId);
var profileGenderRadios = $('input:radio[name="profileGender"]');
var status = false;
for (var i = 0; i < profileGenderRadios.length; i++) {
if (currentUser && currentUser.profile &&
currentUser.profile.gender === $(profileGenderRadios[i].closest('label'))[0].innerText) {
$(profileGenderRadios[i]).attr("checked", "checked");
status = true;
break;
};
};
return status;
};
这些函数有效,但我不知道在哪里放置函数调用。因为他们从 Meteor.users
获取数据Collection ,它们应该被称为助手(如讨论的 here ):
JS
Template.profileEdit.helpers({
'selectOptionIfTitleIs': function() {
return updateSelectedOption();
},
'checkRadioIfGenderIs': function() {
return updateCheckedRadio();
});
HTML
<template name="profileEdit">
<form role="form">
<div class="row">
<div class="col-sm-2">
<div class="form-group">
<label>Title</label>
<select class="form-control" name="profileNamePrefix" id="profileNamePrefix">
<option value="Mr">Mr.</option>
<option value="Ms">Ms.</option>
<option value="Mrs">Mrs.</option>
<option value="Dr">Dr.</option>
<option value="Prof">Prof.</option>
<option value="Sir">Sir</option>
</select>
{{#if selectOptionIfTitleIs}}
{{/if}}
</div>
</div><!-- /.col-sm-2 -->
<div class="col-sm-2">
<div class="radio">
<label><input type="radio" name="profileGender">Male</label>
</div>
<div class="radio">
<label><input type="radio" name="profileGender">Female</label>
</div>
</div><!-- /.col-sm-2 -->
{{#if checkRadioIfGenderIs}}
{{/if}}
</div>
</form>
</template>
这在页面刷新时起作用,但是当它通过 Router.go('profileEdit');
从导航栏重定向时它不会更新选定/选中的值,因为 jQuery 调用是空的(我怀疑这是因为它们是在正确呈现 HTML 之前执行的)。将函数调用添加到 onRendered()
解决了这个问题,但在刷新页面时不起作用。
JS
Template.profileEdit.onRendered(function() {
updateSelectedOption();
updateCheckedRadio();
});
有没有办法统一这两个函数调用并在页面重定向和刷新时保持表单更新?关于如何在 Meteor 中以更好的方式实现更新功能的任何提示,我们也很感激。
经过一番思考并从 Peter 的解决方案获得一些帮助后,我最终通过仅使用空格键和模板助手解决了这个问题:
HTML
<form role="form">
<div class="col-sm-2">
<div class="form-group">
<label>Title</label>
<select class="form-control" name="profileNamePrefix" id="profileNamePrefix">
{{#each namePrefixes}}
<option value="{{value}}" selected="{{prefixIsSelected}}">{{name}}</option>
{{/each}}
</select>
</div>
</div><!-- /.col-sm-2 -->
<div class="col-sm-2">
{{#each genders}}
<div class="radio">
<label><input type="radio" name="profileGender" checked="{{genderIsChecked}}">{{name}}</label>
</div>
{{/each}}
</div><!-- /.col-sm-2 -->
</form>
JS
Template.profileEdit.helpers({
namePrefixes: [{
name: "Mr.",
value: "Mr"
},
{
name: "Ms.",
value: "Ms"
},
{
name: "Mrs.",
value: "Mrs"
},
{
name: "Dr.",
value: "Dr"
},
{
name: "Prof.",
value: "Prof"
},
{
name: "Sir",
value: "Sir"
}
],
genders: [{name: "Male"},
{name: "Female"}
],
'prefixIsSelected': function() {
var currentUserId = Meteor.userId();
var currentUser = Meteor.users.findOne(currentUserId);
return currentUser && currentUser.profile && currentUser.profile.title === this.value;
},
'genderIsChecked': function() {
var currentUserId = Meteor.userId();
var currentUser = Meteor.users.findOne(currentUserId);
return currentUser && currentUser.profile && currentUser.profile.gender === this.name;
}
});
这样,当重定向或刷新时,表单会正确更新。剩下的唯一问题是,如果我将被迫通过依赖于数据集合的 jQuery 更新某些内容,那么从哪里调用该代码?或者是否总是可以使用空格键找到“ meteor 之路”?
提前致谢
最佳答案
您可以使用直接在模板中返回 true/false 的模板助手。以下解释假定您当前的数据上下文 (this
) 是您的用户或拥有数据的配置文件:
单选按钮和复选框
<input name="gender" type="radio" checked="{{genderCheck 'male'}}"/> Male
然后声明一个模板助手:
genderCheck: function(value) {
return (this.profile.gender == value);
}
禁用属性的工作方式相同。 Blaze(Meteor 模板)在交付 DOM 时删除过时的选中和禁用属性。
选择
<select name="salutation">
<option selected="{{checkSalutation 'Mr'}}">Mr</option>
<option selected="{{checkSalutation 'Mrs'}}">Mrs</option>
..
</select>
还有助手:
checkSalutation: function(value) {
return (this.profile.salutation == value);
}
如果您有一个 {{#each ..}}
循环,您可以根据需要将元素或元素的属性传递给帮助程序。如果您不这样做,您仍然可以使用 Javascript 代码中的 this
访问它。模板助手将 this
称为当前数据上下文(例如,在循环内当前循环元素)。
关于javascript - 应该在哪里调用包含来自 Meteor 订阅的集合数据以及 jQuery DOM 操作的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29843042/
初学者 android 问题。好的,我已经成功写入文件。例如。 //获取文件名 String filename = getResources().getString(R.string.filename
我已经将相同的图像保存到/data/data/mypackage/img/中,现在我想显示这个全屏,我曾尝试使用 ACTION_VIEW 来显示 android 标准程序,但它不是从/data/dat
我正在使用Xcode 9,Swift 4。 我正在尝试使用以下代码从URL在ImageView中显示图像: func getImageFromUrl(sourceUrl: String) -> UII
我的 Ubuntu 安装 genymotion 有问题。主要是我无法调试我的数据库,因为通过 eclipse 中的 DBMS 和 shell 中的 adb 我无法查看/data/文件夹的内容。没有显示
我正在尝试用 PHP 发布一些 JSON 数据。但是出了点问题。 这是我的 html -- {% for x in sets %}
我观察到两种方法的结果不同。为什么是这样?我知道 lm 上发生了什么,但无法弄清楚 tslm 上发生了什么。 > library(forecast) > set.seed(2) > tts lm(t
我不确定为什么会这样!我有一个由 spring data elasticsearch 和 spring data jpa 使用的类,但是当我尝试运行我的应用程序时出现错误。 Error creatin
在 this vega 图表,如果我下载并转换 flare-dependencies.json使用以下 jq 到 csv命令, jq -r '(map(keys) | add | unique) as
我正在提交一个项目,我必须在其中创建一个带有表的 mysql 数据库。一切都在我这边进行,所以我只想检查如何将我所有的压缩文件发送给使用不同计算机的人。基本上,我如何为另一台计算机创建我的数据库文件,
我有一个应用程序可以将文本文件写入内部存储。我想仔细看看我的电脑。 我运行了 Toast.makeText 来显示路径,它说:/数据/数据/我的包 但是当我转到 Android Studio 的 An
我喜欢使用 Genymotion 模拟器以如此出色的速度加载 Android。它有非常好的速度,但仍然有一些不稳定的性能。 如何从 Eclipse 中的文件资源管理器访问 Genymotion 模拟器
我需要更改 Silverlight 中文本框的格式。数据通过 MVVM 绑定(bind)。 例如,有一个 int 属性,我将 1 添加到 setter 中的值并调用 OnPropertyChanged
我想向 Youtube Data API 提出请求,但我不需要访问任何用户信息。我只想浏览公共(public)视频并根据搜索词显示视频。 我可以在未经授权的情况下这样做吗? 最佳答案 YouTube
我已经设置了一个 Twilio 应用程序,我想向人们发送更新,但我不想回复单个文本。我只是想让他们在有问题时打电话。我一切正常,但我想在发送文本时显示传入文本,以确保我不会错过任何问题。我正在使用 p
我有一个带有表单的网站(目前它是纯 HTML,但我们正在切换到 JQuery)。流程是这样的: 接受用户的输入 --- 5 个整数 通过 REST 调用网络服务 在服务器端运行一些计算...并生成一个
假设我们有一个名为 configuration.js 的文件,当我们查看内部时,我们会看到: 'use strict'; var profile = { "project": "%Projec
这部分是对 Previous Question 的扩展我的: 我现在可以从我的 CI Controller 成功返回 JSON 数据,它返回: {"results":[{"id":"1","Sourc
有什么有效的方法可以删除 ios 中 CBL 的所有文档存储?我对此有疑问,或者,如果有人知道如何从本质上使该应用程序像刚刚安装一样,那也会非常有帮助。我们正在努力确保我们的注销实际上将应用程序设置为
我有一个 Rails 应用程序,它与其他 Rails 应用程序通信以进行数据插入。我使用 jQuery $.post 方法进行数据插入。对于插入,我的其他 Rails 应用程序显示 200 OK。但在
我正在为服务于发布请求的 API 调用运行单元测试。我正在传递请求正文,并且必须将响应作为帐户数据返回。但我只收到断言错误 注意:数据是从 Azure 中获取的 spec.js const accou
我是一名优秀的程序员,十分优秀!