在keystonejs中为locals变量赋值

时间:2017-09-06 10:01:11

标签: javascript node.js handlebars.js keystonejs

在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值赋给此变量。

1 个答案:

答案 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>

我希望这会有所帮助。