在keystonejs(节点cms)中,我在keystonejs中使用把手作为模板引擎。在handlebar文件中,我使用#each迭代数组。
private readonly Dictionary<Project, Timer> _timers = new Dictionary<Project, Timer>();
private void OnPlayButtonClicked(object sender, RoutedEventArgs e)
{
var selectedProject = ((FrameworkElement)sender).DataContext as Project;
if (selectedProject != null)
{
Console.WriteLine("Selected Project has been played: " +
selectedProject.ProjectName + " : Billed Hours - " +
selectedProject.ActualBilledHours);
if (ProjectDictionary.ContainsKey(selectedProject))
{
ProjectDictionary.Remove(selectedProject);
var toggle = IsPlaying = !IsPlaying;
ProjectDictionary.Add(selectedProject, toggle);
foreach (var dict in ProjectDictionary)
{
if (dict.Key == selectedProject)
{
//get the timer from the dictionary
Timer timer;
if (!_timers.TryGetValue(selectedProject, out timer))
{
timer = new Timer();
_timers.Add(selectedProject, timer);
}
//start or stop
if (toggle)
timer.Start();
else
timer.Stop();
}
}
}
}
}
这里我想在路线中调用一个函数,我该怎么做?
我想到的其他方式是初始化locals变量。就像我在路径文件中有一个变量locals.selectedPositionIndex,我想在点击任何h1元素时将特定h1元素的@index值赋给此变量。
答案 0 :(得分:1)
您可以在Handlebars模板的底部添加一个脚本,并在其中包含该功能:
<script>
document.querySelector('h1').addEventListener('click', function() {
// Code here
})
</script>
或者,这里有一个问题,有一个有用的答案: Passing a function into a Handlebars template
我已将上述问题的答案修改为与KeystoneJS合作:
在您的视图中,您可以将功能分配给当地人:
locals.func = function () {
// Code here
};
然后你需要在 /templates/views/helpers/index.js 中创建一个Handlebars助手:
_helpers.stringifyFunc = function(fn) {
return new hbs.SafeString("(" + fn.toString().replace(/\"/g,"'") + ")()");
};
然后您可以在Handlebars模板中使用它:
<h1 onclick="{{ stringifyFunc func }}">{{ title }}</h1>
我希望这会有所帮助。